From 7ee5b1e15b905fa1f7096a6845285e06f4aed6a7 Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 11:29:53 +0100 Subject: [PATCH 1/7] feat(grouping): Add better support for native fingerprinting/grouping use-cases --- src/sentry/grouping/component.py | 10 + src/sentry/grouping/enhancer/matchers.py | 60 ++- .../grouping/fingerprinting/matchers.py | 90 +++- src/sentry/grouping/fingerprinting/parser.py | 50 +- src/sentry/grouping/fingerprinting/rules.py | 61 ++- src/sentry/grouping/fingerprinting/utils.py | 24 + .../grouping/strategies/configurations.py | 14 + src/sentry/grouping/strategies/newstyle.py | 49 +- src/sentry/grouping/utils.py | 37 ++ tests/sentry/grouping/test_fingerprinting.py | 468 ++++++++++++++++++ 10 files changed, 846 insertions(+), 17 deletions(-) diff --git a/src/sentry/grouping/component.py b/src/sentry/grouping/component.py index 40402b2dc0d705..fad5891ce544b1 100644 --- a/src/sentry/grouping/component.py +++ b/src/sentry/grouping/component.py @@ -19,6 +19,8 @@ "exception": "exception", "stacktrace": "stacktrace", "threads": "thread", + "thread_id": "thread-id", + "thread_name": "thread-name", "hostname": "hostname", "violation": "violation", "uri": "URL", @@ -271,6 +273,14 @@ class NSErrorGroupingComponent( id: str = "ns_error" +class ThreadIdGroupingComponent(BaseGroupingComponent[str]): + id: str = "thread_id" + + +class ThreadNameGroupingComponent(BaseGroupingComponent[str]): + id: str = "thread_name" + + FrameGroupingComponentChild = ( ContextLineGroupingComponent | FilenameGroupingComponent diff --git a/src/sentry/grouping/enhancer/matchers.py b/src/sentry/grouping/enhancer/matchers.py index 17927a1d200998..b361feb2e88c3d 100644 --- a/src/sentry/grouping/enhancer/matchers.py +++ b/src/sentry/grouping/enhancer/matchers.py @@ -78,6 +78,12 @@ def _cached( # fingerprinting-specific fields "family": "family", "app": "app", + # thread context fields (available when processing threads) + "thread.name": "thread_name", + "thread.id": "thread_id", + "thread.state": "thread_state", + "thread.crashed": "thread_crashed", + "thread.current": "thread_current", } @@ -90,11 +96,29 @@ class MatchFrame(TypedDict): module: bytes | None package: bytes | None path: bytes | None + # Thread context (optional, only present when frame belongs to a thread) + thread_name: bytes | None + thread_id: bytes | None + thread_state: bytes | None + thread_crashed: bool | None + thread_current: bool | None # TODO: Maybe someday mypy won't make us keep this as a separate list MatchFrameKey = Literal[ - "category", "family", "function", "in_app", "orig_in_app", "module", "package", "path" + "category", + "family", + "function", + "in_app", + "orig_in_app", + "module", + "package", + "path", + "thread_name", + "thread_id", + "thread_state", + "thread_crashed", + "thread_current", ] @@ -104,8 +128,16 @@ def _get_function_name(frame_data: dict[str, Any], platform: str | None) -> str: return function_name or "" -def create_match_frame(frame_data: dict[str, Any], platform: str | None) -> MatchFrame: - """Create flat dict of values relevant to matchers""" +def create_match_frame( + frame_data: dict[str, Any], platform: str | None, thread_data: dict[str, Any] | None = None +) -> MatchFrame: + """Create flat dict of values relevant to matchers + + Args: + frame_data: Frame information + platform: Platform string + thread_data: Optional thread context (name, id, state, crashed, current) + """ match_frame = dict( category=get_path(frame_data, "data", "category"), family=get_behavior_family_for_platform(frame_data.get("platform") or platform), @@ -115,6 +147,12 @@ def create_match_frame(frame_data: dict[str, Any], platform: str | None) -> Matc module=get_path(frame_data, "module"), package=frame_data.get("package"), path=frame_data.get("abs_path") or frame_data.get("filename"), + # Thread context (if available) + thread_name=thread_data.get("name") if thread_data else None, + thread_id=str(thread_data.get("id")) if thread_data and thread_data.get("id") else None, + thread_state=thread_data.get("state") if thread_data else None, + thread_crashed=bool(thread_data.get("crashed")) if thread_data else None, + thread_current=bool(thread_data.get("current")) if thread_data else None, ) for key in list(match_frame.keys()): @@ -123,11 +161,14 @@ def create_match_frame(frame_data: dict[str, Any], platform: str | None) -> Matc if isinstance(value, str): value = match_frame[key] = value.encode("utf-8") - if key in ("package", "path"): - # NOTE: path-like matchers are case insensitive, and normalize - # file-system separators to `/`. + if key in ("package", "path", "thread_name", "thread_id", "thread_state"): + # NOTE: path-like and thread matchers are case insensitive # We do this here in a central place instead of in each matcher separately. - value = match_frame[key] = value.lower().replace(b"\\", b"/") + if key in ("package", "path"): + # Also normalize file-system separators to `/` for paths + value = match_frame[key] = value.lower().replace(b"\\", b"/") + else: + value = match_frame[key] = value.lower() return MatchFrame( category=match_frame["category"], @@ -138,6 +179,11 @@ def create_match_frame(frame_data: dict[str, Any], platform: str | None) -> Matc module=match_frame["module"], package=match_frame["package"], path=match_frame["path"], + thread_name=match_frame.get("thread_name"), + thread_id=match_frame.get("thread_id"), + thread_state=match_frame.get("thread_state"), + thread_crashed=match_frame.get("thread_crashed"), + thread_current=match_frame.get("thread_current"), ) diff --git a/src/sentry/grouping/fingerprinting/matchers.py b/src/sentry/grouping/fingerprinting/matchers.py index 5101f03883bdc6..26ca7038511ed9 100644 --- a/src/sentry/grouping/fingerprinting/matchers.py +++ b/src/sentry/grouping/fingerprinting/matchers.py @@ -33,6 +33,12 @@ "app": "app", "sdk": "sdk", "release": "release", + # thread fields + "thread.id": "thread_id", + "thread.name": "thread_name", + "thread.state": "thread_state", + "thread.crashed": "thread_crashed", + "thread.current": "thread_current", } @@ -42,6 +48,9 @@ def __init__( key: str, # The event attribute on which to match pattern: str, # The value to match (or to not match, depending on `negated`) negated: bool = False, # If True, match when `event[key]` does NOT equal `pattern` + range: ( + str | None + ) = None, # "up" (frames above), "down" (frames below), or None (this frame) ) -> None: if key.startswith("tags."): self.key = key @@ -52,6 +61,7 @@ def __init__( raise InvalidFingerprintingConfig("Unknown matcher '%s'" % key) self.pattern = pattern self.negated = negated + self.range = range @property def match_type(self) -> str: @@ -69,6 +79,8 @@ def match_type(self) -> str: return "family" if self.key == "release": return "release" + if self.key.startswith("thread_"): + return "threads" return "frames" def matches(self, event_values: dict[str, Any]) -> bool: @@ -121,6 +133,12 @@ def _positive_match(self, event_values: dict[str, Any]) -> bool: if self.key in ["level", "value"]: return glob_match(value, self.pattern, ignorecase=True) + if self.key in ["thread_crashed", "thread_current"]: + return value == bool_from_string(self.pattern) + + if self.key in ["thread_id", "thread_name", "thread_state"]: + return glob_match(value, self.pattern, ignorecase=True) + return glob_match(value, self.pattern, ignorecase=False) def _to_config_structure(self) -> list[str]: @@ -140,8 +158,78 @@ def _from_config_structure(cls, matcher: list[str]) -> Self: @property def text(self) -> str: - return '{}{}:"{}"'.format( + range_prefix = {"up": "^", "down": "v"}.get(self.range, "") + return '{}{}{}:"{}"'.format( + range_prefix, "!" if self.negated else "", self.key, self.pattern, ) + + +class CallerMatcher: + """ + Wraps a FingerprintMatcher to match frames above (callers) in the stack. + Syntax: [ function:foo ] | matches when the caller is foo + """ + + def __init__(self, inner: FingerprintMatcher): + self.inner = inner + + @property + def match_type(self) -> str: + # Caller matchers only work with frame-based matching + return "frames" + + def matches( + self, event_values: dict[str, Any], frame_idx: int, all_frames: list[dict[str, Any]] + ) -> bool: + # Check if there's a frame above (caller) + if frame_idx + 1 < len(all_frames): + caller_frame = all_frames[frame_idx + 1] + return self.inner.matches(caller_frame) + return False + + def _to_config_structure(self) -> list[str]: + inner_structure = self.inner._to_config_structure() + # Mark as caller matcher by wrapping key with brackets and pipe + inner_structure[0] = f"[{inner_structure[0]}]|" + return inner_structure + + @property + def text(self) -> str: + return f"[ {self.inner.text} ] |" + + +class CalleeMatcher: + """ + Wraps a FingerprintMatcher to match frames below (callees) in the stack. + Syntax: | [ function:bar ] matches when the callee is bar + """ + + def __init__(self, inner: FingerprintMatcher): + self.inner = inner + + @property + def match_type(self) -> str: + # Callee matchers only work with frame-based matching + return "frames" + + def matches( + self, event_values: dict[str, Any], frame_idx: int, all_frames: list[dict[str, Any]] + ) -> bool: + # Check if there's a frame below (callee) + if frame_idx > 0: + callee_frame = all_frames[frame_idx - 1] + return self.inner.matches(callee_frame) + return False + + def _to_config_structure(self) -> list[str]: + inner_structure = self.inner._to_config_structure() + # Mark as callee matcher by wrapping key with pipe and brackets + inner_structure[0] = f"|[{inner_structure[0]}]" + return inner_structure + + @property + def text(self) -> str: + return f"| [ {self.inner.text} ]" diff --git a/src/sentry/grouping/fingerprinting/parser.py b/src/sentry/grouping/fingerprinting/parser.py index 25a702fc9d6342..a304362ca31a48 100644 --- a/src/sentry/grouping/fingerprinting/parser.py +++ b/src/sentry/grouping/fingerprinting/parser.py @@ -30,8 +30,10 @@ rule = _ matchers _ follow _ fingerprint -matchers = matcher+ -matcher = _ negation? matcher_type sep argument +matchers = caller_matcher? frame_matcher+ callee_matcher? +frame_matcher = _ negation? matcher_type sep argument +caller_matcher = _ "[" _ frame_matcher _ "]" _ "|" +callee_matcher = _ "|" _ "[" _ frame_matcher _ "]" matcher_type = key / quoted_key argument = quoted / unquoted @@ -93,10 +95,48 @@ def visit_rule( object, list[FingerprintMatcher], object, object, object, FingerprintWithAttributes ], ) -> FingerprintRule: - _, matcher, _, _, _, (fingerprint, attributes) = children - return FingerprintRule(matcher, fingerprint, attributes) + _, matchers, _, _, _, (fingerprint, attributes) = children + return FingerprintRule(matchers, fingerprint, attributes) - def visit_matcher( + def visit_matchers( + self, + _: object, + children: tuple[ + list[FingerprintMatcher] | None, + list[FingerprintMatcher], + list[FingerprintMatcher] | None, + ], + ) -> list[FingerprintMatcher]: + caller_matcher, frame_matchers, callee_matcher = children + result = [] + if caller_matcher: + result.extend(caller_matcher) + result.extend(frame_matchers) + if callee_matcher: + result.extend(callee_matcher) + return result + + def visit_caller_matcher( + self, + _: object, + children: tuple[object, object, object, FingerprintMatcher, object, object, object, object], + ) -> list[FingerprintMatcher]: + from sentry.grouping.fingerprinting.matchers import CallerMatcher + + _, _, _, frame_matcher, _, _, _, _ = children + return [CallerMatcher(frame_matcher)] + + def visit_callee_matcher( + self, + _: object, + children: tuple[object, object, object, object, object, FingerprintMatcher, object, object], + ) -> list[FingerprintMatcher]: + from sentry.grouping.fingerprinting.matchers import CalleeMatcher + + _, _, _, _, _, frame_matcher, _, _ = children + return [CalleeMatcher(frame_matcher)] + + def visit_frame_matcher( self, _: object, children: tuple[object, list[str], str, object, str] ) -> FingerprintMatcher: _, negation, key, _, pattern = children diff --git a/src/sentry/grouping/fingerprinting/rules.py b/src/sentry/grouping/fingerprinting/rules.py index 85353f07a61352..74971f89dee8ea 100644 --- a/src/sentry/grouping/fingerprinting/rules.py +++ b/src/sentry/grouping/fingerprinting/rules.py @@ -2,7 +2,7 @@ import logging from collections.abc import Sequence -from typing import NamedTuple, NotRequired, Self, TypedDict +from typing import Any, NamedTuple, NotRequired, Self, TypedDict from sentry.grouping.fingerprinting.matchers import FingerprintMatcher from sentry.grouping.fingerprinting.utils import EventDatastore @@ -61,10 +61,21 @@ def __init__( def test_for_match_with_event( self, event_datastore: EventDatastore ) -> None | FingerprintWithAttributes: - matchers_by_match_type: dict[str, list[FingerprintMatcher]] = {} + from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher + + matchers_by_match_type: dict[str, list[Any]] = {} + has_sibling_matchers = False + for matcher in self.matchers: + if isinstance(matcher, (CallerMatcher, CalleeMatcher)): + has_sibling_matchers = True matchers_by_match_type.setdefault(matcher.match_type, []).append(matcher) + # If we have sibling matchers, we need to match against frame sequences + if has_sibling_matchers: + return self._test_with_frame_context(event_datastore, matchers_by_match_type) + + # Original logic for simple matchers for match_type, matchers in matchers_by_match_type.items(): for event_values in event_datastore.get_values(match_type): if all(matcher.matches(event_values) for matcher in matchers): @@ -74,6 +85,52 @@ def test_for_match_with_event( return FingerprintWithAttributes(self.fingerprint, self.attributes) + def _test_with_frame_context( + self, event_datastore: EventDatastore, matchers_by_match_type: dict[str, list[Any]] + ) -> None | FingerprintWithAttributes: + from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher + + # First, handle non-frame matchers + for match_type, matchers in matchers_by_match_type.items(): + if match_type != "frames": + for event_values in event_datastore.get_values(match_type): + if all(matcher.matches(event_values) for matcher in matchers): + break + else: + return None + + # Now handle frame matchers with context + if "frames" in matchers_by_match_type: + frame_matchers = matchers_by_match_type["frames"] + all_frames = event_datastore.get_values("frames") + + # Try to find a matching frame sequence + for frame_idx, frame in enumerate(all_frames): + match_found = True + + for matcher in frame_matchers: + if isinstance(matcher, CallerMatcher): + if not matcher.matches(frame, frame_idx, all_frames): + match_found = False + break + elif isinstance(matcher, CalleeMatcher): + if not matcher.matches(frame, frame_idx, all_frames): + match_found = False + break + else: + # Regular frame matcher + if not matcher.matches(frame): + match_found = False + break + + if match_found: + return FingerprintWithAttributes(self.fingerprint, self.attributes) + + # No matching frame sequence found + return None + + return FingerprintWithAttributes(self.fingerprint, self.attributes) + def _to_config_structure(self) -> FingerprintRuleJSON: config_structure: FingerprintRuleJSON = { "text": self.text, diff --git a/src/sentry/grouping/fingerprinting/utils.py b/src/sentry/grouping/fingerprinting/utils.py index 28e1e460330c27..1cf91108940fc4 100644 --- a/src/sentry/grouping/fingerprinting/utils.py +++ b/src/sentry/grouping/fingerprinting/utils.py @@ -48,6 +48,14 @@ class _ReleaseInfo(TypedDict): release: str | None +class _ThreadInfo(TypedDict): + thread_id: str | None + thread_name: str | None + thread_state: str | None + thread_crashed: bool + thread_current: bool + + class EventDatastore: def __init__(self, event: Mapping[str, Any]) -> None: self.event = event @@ -60,6 +68,7 @@ def __init__(self, event: Mapping[str, Any]) -> None: self._sdk: list[_SdkInfo] | None = None self._family: list[_FamilyInfo] | None = None self._release: list[_ReleaseInfo] | None = None + self._threads: list[_ThreadInfo] | None = None def get_values(self, match_type: str) -> list[dict[str, Any]]: """ @@ -154,3 +163,18 @@ def _get_release(self) -> list[_ReleaseInfo]: {"release": self.event["release"].strip() if self.event.get("release") else None} ] return self._release + + def _get_threads(self) -> list[_ThreadInfo]: + if self._threads is None: + self._threads = [] + for thread in get_path(self.event, "threads", "values", filter=True) or (): + self._threads.append( + { + "thread_id": thread.get("id"), + "thread_name": thread.get("name"), + "thread_state": thread.get("state"), + "thread_crashed": bool(thread.get("crashed")), + "thread_current": bool(thread.get("current")), + } + ) + return self._threads diff --git a/src/sentry/grouping/strategies/configurations.py b/src/sentry/grouping/strategies/configurations.py index 939a36a923dba5..35f68d7d97bedd 100644 --- a/src/sentry/grouping/strategies/configurations.py +++ b/src/sentry/grouping/strategies/configurations.py @@ -72,3 +72,17 @@ def register_grouping_config(id: str, **kwargs) -> type[StrategyConfiguration]: initial_context={}, enhancements_base="all-platforms:2025-11-21", ) + +# Experimental config with thread-aware grouping +THREAD_GROUPING_CONFIG = "newstyle:2025-with-threads" +register_grouping_config( + id=THREAD_GROUPING_CONFIG, + base=FALL_2025_GROUPING_CONFIG, + initial_context={ + # Enable thread metadata in automatic grouping + # When enabled, errors in different threads will create separate issues + "include_thread_name_in_grouping": True, + "include_thread_id_in_grouping": False, # Usually name is more useful than id + }, + enhancements_base="all-platforms:2025-11-21", +) diff --git a/src/sentry/grouping/strategies/newstyle.py b/src/sentry/grouping/strategies/newstyle.py index b8c66a346a98a2..1b308a9da6e80c 100644 --- a/src/sentry/grouping/strategies/newstyle.py +++ b/src/sentry/grouping/strategies/newstyle.py @@ -873,24 +873,69 @@ def threads( def _get_thread_components( threads: list[dict[str, Any]], event: Event, context: GroupingContext, **kwargs: dict[str, Any] ) -> ComponentsByVariant | None: + # Only process single-thread scenarios (existing behavior) + # Multiple threads are ambiguous for grouping if len(threads) != 1: return None - stacktrace = threads[0].get("stacktrace") + thread = threads[0] + stacktrace = thread.get("stacktrace") + + # Collect optional thread metadata components + # These allow grouping by thread properties when enabled + thread_metadata_components = [] + + # Check if config enables thread metadata in grouping via initial_context + include_thread_name = context.get("include_thread_name_in_grouping", False) + include_thread_id = context.get("include_thread_id_in_grouping", False) + + if include_thread_name and thread.get("name"): + from sentry.grouping.component import ThreadNameGroupingComponent + + thread_metadata_components.append( + ThreadNameGroupingComponent( + values=[thread["name"]], contributes=True, hint="thread name included in grouping" + ) + ) + + if include_thread_id and thread.get("id"): + from sentry.grouping.component import ThreadIdGroupingComponent + + thread_metadata_components.append( + ThreadIdGroupingComponent( + values=[str(thread["id"])], contributes=True, hint="thread id included in grouping" + ) + ) + + # If no stacktrace, check if we can group by thread metadata alone if not stacktrace: + if thread_metadata_components: + # Group by thread metadata when stacktrace is unavailable + return { + "app": ThreadsGroupingComponent( + values=thread_metadata_components, + contributes=True, + hint="no stacktrace available, grouping by thread metadata", + ) + } + # No stacktrace and no metadata = can't group return { "app": ThreadsGroupingComponent( contributes=False, hint="ignored because thread has no stacktrace" ) } + # Build components with stacktrace + optional thread metadata thread_components_by_variant = {} for variant_name, stacktrace_component in context.get_grouping_components_by_variant( stacktrace, event=event, **kwargs ).items(): + # Combine stacktrace with optional thread metadata + # Metadata comes after stacktrace so stacktrace is primary + all_values = [stacktrace_component] + thread_metadata_components thread_components_by_variant[variant_name] = ThreadsGroupingComponent( - values=[stacktrace_component], frame_counts=stacktrace_component.frame_counts + values=all_values, frame_counts=stacktrace_component.frame_counts ) return thread_components_by_variant diff --git a/src/sentry/grouping/utils.py b/src/sentry/grouping/utils.py index 8783d52bb45705..f1499b5454650a 100644 --- a/src/sentry/grouping/utils.py +++ b/src/sentry/grouping/utils.py @@ -150,6 +150,43 @@ def resolve_fingerprint_variable( if tag_name == requested_tag and tag_value is not None: return tag_value return "" % requested_tag + + elif variable_key in ("thread.name", "thread_name"): + # Get the crashed or current thread's name + threads = get_path(event_data, "threads", "values") + if threads: + # Prefer crashed thread, then current thread, then first thread + thread = next( + (t for t in threads if t.get("crashed")), + next((t for t in threads if t.get("current")), threads[0] if threads else None), + ) + if thread and thread.get("name"): + return thread["name"] + return "" + + elif variable_key in ("thread.id", "thread_id"): + # Get the crashed or current thread's id + threads = get_path(event_data, "threads", "values") + if threads: + thread = next( + (t for t in threads if t.get("crashed")), + next((t for t in threads if t.get("current")), threads[0] if threads else None), + ) + if thread and thread.get("id"): + return str(thread["id"]) + return "" + + elif variable_key in ("thread.state", "thread_state"): + threads = get_path(event_data, "threads", "values") + if threads: + thread = next( + (t for t in threads if t.get("crashed")), + next((t for t in threads if t.get("current")), threads[0] if threads else None), + ) + if thread and thread.get("state"): + return thread["state"] + return "" + else: return None diff --git a/tests/sentry/grouping/test_fingerprinting.py b/tests/sentry/grouping/test_fingerprinting.py index 1cb2b22cd71f4a..f7ca79eed6e127 100644 --- a/tests/sentry/grouping/test_fingerprinting.py +++ b/tests/sentry/grouping/test_fingerprinting.py @@ -305,3 +305,471 @@ def dump_variant(variant: BaseVariant) -> dict[str, Any]: }, } ) + + +def test_thread_matchers_parsing() -> None: + """Test that thread matchers are parsed correctly""" + rules = FingerprintingConfig.from_config_string( + """ +# Thread-based fingerprinting rules +thread.name:MainThread type:RuntimeError -> main-thread-error +thread.id:123 function:process -> thread-123-process +thread.crashed:true -> crashed-thread +thread.current:true thread.name:Worker* -> current-worker-thread +thread.state:RUNNABLE -> runnable-thread +""" + ) + assert rules._to_config_structure() == { + "rules": [ + { + "text": 'thread_name:"MainThread" type:"RuntimeError" -> "main-thread-error"', + "matchers": [["thread_name", "MainThread"], ["type", "RuntimeError"]], + "fingerprint": ["main-thread-error"], + "attributes": {}, + }, + { + "text": 'thread_id:"123" function:"process" -> "thread-123-process"', + "matchers": [["thread_id", "123"], ["function", "process"]], + "fingerprint": ["thread-123-process"], + "attributes": {}, + }, + { + "text": 'thread_crashed:"true" -> "crashed-thread"', + "matchers": [["thread_crashed", "true"]], + "fingerprint": ["crashed-thread"], + "attributes": {}, + }, + { + "text": 'thread_current:"true" thread_name:"Worker*" -> "current-worker-thread"', + "matchers": [["thread_current", "true"], ["thread_name", "Worker*"]], + "fingerprint": ["current-worker-thread"], + "attributes": {}, + }, + { + "text": 'thread_state:"RUNNABLE" -> "runnable-thread"', + "matchers": [["thread_state", "RUNNABLE"]], + "fingerprint": ["runnable-thread"], + "attributes": {}, + }, + ], + "version": 1, + } + + +def test_thread_matchers_matching() -> None: + """Test that thread matchers correctly match event data""" + rules = FingerprintingConfig.from_config_string( + """ +thread.name:MainThread -> main-thread +thread.crashed:true -> crashed +thread.current:true -> current +""" + ) + + # Event with MainThread that crashed + event_with_main_thread = { + "threads": { + "values": [ + { + "id": "1", + "name": "MainThread", + "crashed": True, + "current": False, + "state": "RUNNABLE", + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_main_thread) + assert match is not None + assert match.fingerprint == ["main-thread"] + + # Event with crashed thread (not MainThread) + event_with_crashed = { + "threads": { + "values": [ + { + "id": "2", + "name": "WorkerThread", + "crashed": True, + "current": False, + "state": "BLOCKED", + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_crashed) + assert match is not None + assert match.fingerprint == ["crashed"] + + # Event with current thread + event_with_current = { + "threads": { + "values": [ + { + "id": "3", + "name": "BackgroundThread", + "crashed": False, + "current": True, + "state": "WAITING", + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_current) + assert match is not None + assert match.fingerprint == ["current"] + + +def test_thread_matchers_wildcard() -> None: + """Test that wildcard patterns work with thread matchers""" + rules = FingerprintingConfig.from_config_string( + """ +thread.name:Worker* -> worker-thread +thread.state:RUN* -> running-thread +""" + ) + + event_with_worker = { + "threads": { + "values": [ + { + "id": "1", + "name": "Worker-1", + "crashed": False, + "current": False, + "state": "RUNNABLE", + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_worker) + assert match is not None + assert match.fingerprint == ["worker-thread"] + + event_with_runnable = { + "threads": { + "values": [ + { + "id": "2", + "name": "MainThread", + "crashed": False, + "current": False, + "state": "RUNNING", + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_runnable) + assert match is not None + assert match.fingerprint == ["running-thread"] + + +def test_thread_matchers_negation() -> None: + """Test that negated thread matchers work correctly""" + rules = FingerprintingConfig.from_config_string( + """ +!thread.crashed:true -> not-crashed +!thread.name:MainThread -> not-main-thread +""" + ) + + # Event with non-crashed thread + event_not_crashed = { + "threads": { + "values": [ + { + "id": "1", + "name": "WorkerThread", + "crashed": False, + "current": False, + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_not_crashed) + assert match is not None + assert match.fingerprint == ["not-crashed"] + + # Event without MainThread + event_not_main = { + "threads": { + "values": [ + { + "id": "2", + "name": "BackgroundThread", + "crashed": False, + "current": False, + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_not_main) + assert match is not None + assert match.fingerprint == ["not-main-thread"] + + +def test_sibling_frame_parsing() -> None: + """Test that sibling frame matchers (caller/callee) are parsed correctly""" + rules = FingerprintingConfig.from_config_string( + """ +# Sibling frame rules +[ function:caller_func ] | function:target_func -> caller-calls-target +function:target_func | [ function:callee_func ] -> target-calls-callee +[ module:foo ] | function:bar | [ module:baz ] -> foo-bar-baz +""" + ) + assert len(rules.rules) == 3 + + # First rule: caller matcher + assert ( + rules.rules[0].text + == '[ function:"caller_func" ] | function:"target_func" -> "caller-calls-target"' + ) + + # Second rule: callee matcher + assert ( + rules.rules[1].text + == 'function:"target_func" | [ function:"callee_func" ] -> "target-calls-callee"' + ) + + # Third rule: both caller and callee + assert ( + rules.rules[2].text + == '[ module:"foo" ] | function:"bar" | [ module:"baz" ] -> "foo-bar-baz"' + ) + + +def test_sibling_frame_caller_matching() -> None: + """Test that caller matchers work correctly""" + rules = FingerprintingConfig.from_config_string( + """ +[ function:caller ] | function:target -> caller-calls-target +""" + ) + + # Event where caller calls target + event_with_caller = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "bottom"}, + {"function": "target"}, # This is the target + {"function": "caller"}, # This is above target (caller) + {"function": "top"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_caller) + assert match is not None + assert match.fingerprint == ["caller-calls-target"] + + # Event where target exists but not called by caller + event_without_caller = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "bottom"}, + {"function": "target"}, + {"function": "other"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_without_caller) + assert match is None + + +def test_sibling_frame_callee_matching() -> None: + """Test that callee matchers work correctly""" + rules = FingerprintingConfig.from_config_string( + """ +function:target | [ function:callee ] -> target-calls-callee +""" + ) + + # Event where target calls callee + event_with_callee = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "callee"}, # This is below target (callee) + {"function": "target"}, # This is the target + {"function": "caller"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_with_callee) + assert match is not None + assert match.fingerprint == ["target-calls-callee"] + + # Event where target exists but doesn't call callee + event_without_callee = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "other"}, + {"function": "target"}, + {"function": "caller"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_without_callee) + assert match is None + + +def test_sibling_frame_both_caller_and_callee() -> None: + """Test rules with both caller and callee matchers""" + rules = FingerprintingConfig.from_config_string( + """ +[ function:caller ] | function:target | [ function:callee ] -> full-context +""" + ) + + # Event with full context: caller -> target -> callee + event_full_context = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "callee"}, # callee (below target) + {"function": "target"}, # target + {"function": "caller"}, # caller (above target) + {"function": "top"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_full_context) + assert match is not None + assert match.fingerprint == ["full-context"] + + # Event missing caller + event_no_caller = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "callee"}, + {"function": "target"}, + {"function": "other"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_no_caller) + assert match is None + + # Event missing callee + event_no_callee = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "other"}, + {"function": "target"}, + {"function": "caller"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event_no_callee) + assert match is None + + +def test_sibling_frame_with_wildcards() -> None: + """Test that sibling frame matchers work with wildcard patterns""" + rules = FingerprintingConfig.from_config_string( + """ +[ function:*Handler ] | function:process* -> handler-calls-process +""" + ) + + event = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "processData"}, + {"function": "RequestHandler"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event) + assert match is not None + assert match.fingerprint == ["handler-calls-process"] + + +def test_sibling_frame_with_modules() -> None: + """Test sibling frame matching with module matchers""" + rules = FingerprintingConfig.from_config_string( + """ +[ module:controllers.* ] | function:handleRequest -> controller-request +""" + ) + + event = { + "exception": { + "values": [ + { + "stacktrace": { + "frames": [ + {"function": "handleRequest", "module": "app.handlers"}, + {"function": "dispatch", "module": "controllers.user"}, + ] + } + } + ] + } + } + + match = rules.get_fingerprint_values_for_event(event) + assert match is not None + assert match.fingerprint == ["controller-request"] From 8e3650b5bd6dd96e70e1e3fdd17ebc369cc4832d Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 11:56:00 +0100 Subject: [PATCH 2/7] Fix errors, add more tests --- .../grouping/fingerprinting/matchers.py | 8 +- src/sentry/grouping/fingerprinting/parser.py | 18 +- src/sentry/grouping/fingerprinting/rules.py | 18 +- src/sentry/grouping/strategies/newstyle.py | 46 +++-- tests/sentry/grouping/test_enhancer.py | 115 +++++++++++ tests/sentry/grouping/test_fingerprinting.py | 168 ++++++++++++++++ tests/sentry/grouping/test_strategies.py | 190 ++++++++++++++++++ 7 files changed, 524 insertions(+), 39 deletions(-) diff --git a/src/sentry/grouping/fingerprinting/matchers.py b/src/sentry/grouping/fingerprinting/matchers.py index 26ca7038511ed9..67798b33af99f7 100644 --- a/src/sentry/grouping/fingerprinting/matchers.py +++ b/src/sentry/grouping/fingerprinting/matchers.py @@ -48,9 +48,6 @@ def __init__( key: str, # The event attribute on which to match pattern: str, # The value to match (or to not match, depending on `negated`) negated: bool = False, # If True, match when `event[key]` does NOT equal `pattern` - range: ( - str | None - ) = None, # "up" (frames above), "down" (frames below), or None (this frame) ) -> None: if key.startswith("tags."): self.key = key @@ -61,7 +58,6 @@ def __init__( raise InvalidFingerprintingConfig("Unknown matcher '%s'" % key) self.pattern = pattern self.negated = negated - self.range = range @property def match_type(self) -> str: @@ -158,9 +154,7 @@ def _from_config_structure(cls, matcher: list[str]) -> Self: @property def text(self) -> str: - range_prefix = {"up": "^", "down": "v"}.get(self.range, "") - return '{}{}{}:"{}"'.format( - range_prefix, + return '{}{}:"{}"'.format( "!" if self.negated else "", self.key, self.pattern, diff --git a/src/sentry/grouping/fingerprinting/parser.py b/src/sentry/grouping/fingerprinting/parser.py index a304362ca31a48..64aee00cb60bb2 100644 --- a/src/sentry/grouping/fingerprinting/parser.py +++ b/src/sentry/grouping/fingerprinting/parser.py @@ -7,7 +7,7 @@ from parsimonious.nodes import Node, NodeVisitor, RegexNode from sentry.grouping.fingerprinting.exceptions import InvalidFingerprintingConfig -from sentry.grouping.fingerprinting.matchers import FingerprintMatcher +from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher, FingerprintMatcher from sentry.grouping.fingerprinting.rules import ( FingerprintRule, FingerprintRuleAttributes, @@ -102,13 +102,13 @@ def visit_matchers( self, _: object, children: tuple[ - list[FingerprintMatcher] | None, + list[FingerprintMatcher | CallerMatcher | CalleeMatcher] | None, list[FingerprintMatcher], - list[FingerprintMatcher] | None, + list[FingerprintMatcher | CallerMatcher | CalleeMatcher] | None, ], - ) -> list[FingerprintMatcher]: + ) -> list[FingerprintMatcher | CallerMatcher | CalleeMatcher]: caller_matcher, frame_matchers, callee_matcher = children - result = [] + result: list[FingerprintMatcher | CallerMatcher | CalleeMatcher] = [] if caller_matcher: result.extend(caller_matcher) result.extend(frame_matchers) @@ -120,9 +120,7 @@ def visit_caller_matcher( self, _: object, children: tuple[object, object, object, FingerprintMatcher, object, object, object, object], - ) -> list[FingerprintMatcher]: - from sentry.grouping.fingerprinting.matchers import CallerMatcher - + ) -> list[FingerprintMatcher | CallerMatcher | CalleeMatcher]: _, _, _, frame_matcher, _, _, _, _ = children return [CallerMatcher(frame_matcher)] @@ -130,9 +128,7 @@ def visit_callee_matcher( self, _: object, children: tuple[object, object, object, object, object, FingerprintMatcher, object, object], - ) -> list[FingerprintMatcher]: - from sentry.grouping.fingerprinting.matchers import CalleeMatcher - + ) -> list[FingerprintMatcher | CallerMatcher | CalleeMatcher]: _, _, _, _, _, frame_matcher, _, _ = children return [CalleeMatcher(frame_matcher)] diff --git a/src/sentry/grouping/fingerprinting/rules.py b/src/sentry/grouping/fingerprinting/rules.py index 74971f89dee8ea..6268f708508d00 100644 --- a/src/sentry/grouping/fingerprinting/rules.py +++ b/src/sentry/grouping/fingerprinting/rules.py @@ -2,9 +2,9 @@ import logging from collections.abc import Sequence -from typing import Any, NamedTuple, NotRequired, Self, TypedDict +from typing import NamedTuple, NotRequired, Self, TypedDict -from sentry.grouping.fingerprinting.matchers import FingerprintMatcher +from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher, FingerprintMatcher from sentry.grouping.fingerprinting.utils import EventDatastore logger = logging.getLogger("sentry.events.grouping") @@ -48,7 +48,7 @@ class FingerprintRuleMatch(NamedTuple): class FingerprintRule: def __init__( self, - matchers: Sequence[FingerprintMatcher], + matchers: Sequence[FingerprintMatcher | CallerMatcher | CalleeMatcher], fingerprint: list[str], attributes: FingerprintRuleAttributes, is_builtin: bool = False, @@ -61,9 +61,9 @@ def __init__( def test_for_match_with_event( self, event_datastore: EventDatastore ) -> None | FingerprintWithAttributes: - from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher - - matchers_by_match_type: dict[str, list[Any]] = {} + matchers_by_match_type: dict[ + str, list[FingerprintMatcher | CallerMatcher | CalleeMatcher] + ] = {} has_sibling_matchers = False for matcher in self.matchers: @@ -86,10 +86,10 @@ def test_for_match_with_event( return FingerprintWithAttributes(self.fingerprint, self.attributes) def _test_with_frame_context( - self, event_datastore: EventDatastore, matchers_by_match_type: dict[str, list[Any]] + self, + event_datastore: EventDatastore, + matchers_by_match_type: dict[str, list[FingerprintMatcher | CallerMatcher | CalleeMatcher]], ) -> None | FingerprintWithAttributes: - from sentry.grouping.fingerprinting.matchers import CalleeMatcher, CallerMatcher - # First, handle non-frame matchers for match_type, matchers in matchers_by_match_type.items(): if match_type != "frames": diff --git a/src/sentry/grouping/strategies/newstyle.py b/src/sentry/grouping/strategies/newstyle.py index 1b308a9da6e80c..217c872e0613ae 100644 --- a/src/sentry/grouping/strategies/newstyle.py +++ b/src/sentry/grouping/strategies/newstyle.py @@ -883,15 +883,19 @@ def _get_thread_components( # Collect optional thread metadata components # These allow grouping by thread properties when enabled - thread_metadata_components = [] + from sentry.grouping.component import ( + BaseGroupingComponent, + ThreadIdGroupingComponent, + ThreadNameGroupingComponent, + ) + + thread_metadata_components: list[BaseGroupingComponent[str]] = [] # Check if config enables thread metadata in grouping via initial_context include_thread_name = context.get("include_thread_name_in_grouping", False) include_thread_id = context.get("include_thread_id_in_grouping", False) if include_thread_name and thread.get("name"): - from sentry.grouping.component import ThreadNameGroupingComponent - thread_metadata_components.append( ThreadNameGroupingComponent( values=[thread["name"]], contributes=True, hint="thread name included in grouping" @@ -899,8 +903,6 @@ def _get_thread_components( ) if include_thread_id and thread.get("id"): - from sentry.grouping.component import ThreadIdGroupingComponent - thread_metadata_components.append( ThreadIdGroupingComponent( values=[str(thread["id"])], contributes=True, hint="thread id included in grouping" @@ -910,10 +912,18 @@ def _get_thread_components( # If no stacktrace, check if we can group by thread metadata alone if not stacktrace: if thread_metadata_components: + from sentry.grouping.component import StacktraceGroupingComponent + # Group by thread metadata when stacktrace is unavailable + # Wrap metadata in a StacktraceGroupingComponent for type compatibility + metadata_stacktrace = StacktraceGroupingComponent( + values=thread_metadata_components, + contributes=True, + hint="no stacktrace available, using thread metadata", + ) return { "app": ThreadsGroupingComponent( - values=thread_metadata_components, + values=[metadata_stacktrace], contributes=True, hint="no stacktrace available, grouping by thread metadata", ) @@ -931,12 +941,24 @@ def _get_thread_components( for variant_name, stacktrace_component in context.get_grouping_components_by_variant( stacktrace, event=event, **kwargs ).items(): - # Combine stacktrace with optional thread metadata - # Metadata comes after stacktrace so stacktrace is primary - all_values = [stacktrace_component] + thread_metadata_components - thread_components_by_variant[variant_name] = ThreadsGroupingComponent( - values=all_values, frame_counts=stacktrace_component.frame_counts - ) + # If we have thread metadata, wrap the stacktrace component to include it + if thread_metadata_components: + from sentry.grouping.component import StacktraceGroupingComponent + + # Create a new stacktrace component that includes thread metadata + enhanced_stacktrace = StacktraceGroupingComponent( + values=list(stacktrace_component.values) + thread_metadata_components, + contributes=stacktrace_component.contributes, + hint=stacktrace_component.hint, + ) + thread_components_by_variant[variant_name] = ThreadsGroupingComponent( + values=[enhanced_stacktrace], frame_counts=stacktrace_component.frame_counts + ) + else: + # No thread metadata, just use the stacktrace as-is + thread_components_by_variant[variant_name] = ThreadsGroupingComponent( + values=[stacktrace_component], frame_counts=stacktrace_component.frame_counts + ) return thread_components_by_variant diff --git a/tests/sentry/grouping/test_enhancer.py b/tests/sentry/grouping/test_enhancer.py index b4200b5ffe676d..913e71df0b266a 100644 --- a/tests/sentry/grouping/test_enhancer.py +++ b/tests/sentry/grouping/test_enhancer.py @@ -872,3 +872,118 @@ def test_marks_system_frames_non_contributing_in_app_variant(self) -> None: self.assert_frame_values_match_expected( app_stacktrace_component, expected_frame_results=app_expected_frame_results ) + + +def test_thread_context_matchers() -> None: + """Test that thread context is available in frame matchers""" + from sentry.grouping.enhancer.matchers import create_match_frame + + # Create a frame with thread context + frame = {"function": "processData", "module": "app.handlers"} + thread_data = { + "name": "MainThread", + "id": "123", + "state": "RUNNABLE", + "crashed": True, + "current": False, + } + + match_frame = create_match_frame(frame, "python", thread_data) + + # Verify thread context is present + assert match_frame["thread_name"] == b"mainthread" # lowercased + assert match_frame["thread_id"] == b"123" + assert match_frame["thread_state"] == b"runnable" # lowercased + assert match_frame["thread_crashed"] is True + assert match_frame["thread_current"] is False + + +def test_thread_name_enhancement_rule() -> None: + """Test enhancement rules with thread.name matcher""" + from sentry.grouping.enhancer import EnhancementsConfig + + enhancements = EnhancementsConfig.from_rules_text( + """ + thread.name:MainThread +app + thread.name:Worker* -group + thread.crashed:true category=fatal + """ + ) + + # Verify the rule structure was parsed correctly + assert len(enhancements.rules) == 3 + assert enhancements.rules[0].matchers.matcher.key == b"thread_name" + assert enhancements.rules[0].matchers.matcher.pattern == b"MainThread" + + +def test_thread_crashed_enhancement_rule() -> None: + """Test enhancement rules with thread.crashed matcher""" + from sentry.grouping.enhancer.matchers import create_match_frame + + frame = {"function": "main", "module": "app"} + + # Crashed thread + thread_crashed = {"name": "MainThread", "crashed": True} + match_frame_crashed = create_match_frame(frame, "python", thread_crashed) + assert match_frame_crashed["thread_crashed"] is True + + # Not crashed thread + thread_not_crashed = {"name": "MainThread", "crashed": False} + match_frame_not_crashed = create_match_frame(frame, "python", thread_not_crashed) + assert match_frame_not_crashed["thread_crashed"] is False + + +def test_thread_matchers_in_matchers_dict() -> None: + """Test that thread matchers are registered in MATCHERS dict""" + from sentry.grouping.enhancer.matchers import MATCHERS + + assert "thread.name" in MATCHERS + assert "thread.id" in MATCHERS + assert "thread.state" in MATCHERS + assert "thread.crashed" in MATCHERS + assert "thread.current" in MATCHERS + + assert MATCHERS["thread.name"] == "thread_name" + assert MATCHERS["thread.id"] == "thread_id" + assert MATCHERS["thread.state"] == "thread_state" + assert MATCHERS["thread.crashed"] == "thread_crashed" + assert MATCHERS["thread.current"] == "thread_current" + + +def test_create_match_frame_without_thread_context() -> None: + """Test that frames can still be created without thread context (backward compatibility)""" + from sentry.grouping.enhancer.matchers import create_match_frame + + frame = {"function": "handler", "module": "app"} + + # Call without thread_data parameter + match_frame = create_match_frame(frame, "python") + + # Thread fields should be None + assert match_frame["thread_name"] is None + assert match_frame["thread_id"] is None + assert match_frame["thread_state"] is None + assert match_frame["thread_crashed"] is None + assert match_frame["thread_current"] is None + + # Regular frame fields should still work + assert match_frame["function"] == b"handler" + assert match_frame["module"] == b"app" + + +def test_thread_context_with_wildcard_patterns() -> None: + """Test thread matchers with wildcard patterns""" + from sentry.grouping.enhancer import EnhancementsConfig + + enhancements = EnhancementsConfig.from_rules_text( + """ + thread.name:Worker* -group + thread.state:RUN* category=active + """ + ) + + assert len(enhancements.rules) == 2 + + # Verify patterns were parsed + assert enhancements.rules[0].matchers.matcher.pattern == b"Worker*" + assert enhancements.rules[1].matchers.matcher.pattern == b"RUN*" diff --git a/tests/sentry/grouping/test_fingerprinting.py b/tests/sentry/grouping/test_fingerprinting.py index f7ca79eed6e127..dacc3eda0b7110 100644 --- a/tests/sentry/grouping/test_fingerprinting.py +++ b/tests/sentry/grouping/test_fingerprinting.py @@ -275,6 +275,174 @@ def test_variable_resolution() -> None: ], f"Entry {fingerprint_entry} resolved incorrectly" +def test_thread_variable_resolution() -> None: + """Test that thread.name, thread.id, and thread.state variables resolve correctly.""" + # Event with thread data - crashed thread should be preferred + event_with_threads = NodeData( + id="test-event", + data={ + "threads": { + "values": [ + { + "id": "1", + "name": "MainThread", + "state": "RUNNABLE", + "crashed": False, + "current": False, + }, + { + "id": "2", + "name": "WorkerThread", + "state": "WAITING", + "crashed": True, + "current": False, + }, + { + "id": "3", + "name": "BackgroundThread", + "state": "BLOCKED", + "crashed": False, + "current": True, + }, + ] + } + }, + ) + + # Test thread.name resolution - should prefer crashed thread + assert resolve_fingerprint_values(["{{ thread.name }}"], event_with_threads) == ["WorkerThread"] + assert resolve_fingerprint_values(["{{ thread_name }}"], event_with_threads) == ["WorkerThread"] + + # Test thread.id resolution - should prefer crashed thread + assert resolve_fingerprint_values(["{{ thread.id }}"], event_with_threads) == ["2"] + assert resolve_fingerprint_values(["{{ thread_id }}"], event_with_threads) == ["2"] + + # Test thread.state resolution - should prefer crashed thread + assert resolve_fingerprint_values(["{{ thread.state }}"], event_with_threads) == ["WAITING"] + assert resolve_fingerprint_values(["{{ thread_state }}"], event_with_threads) == ["WAITING"] + + # Event with only current thread (no crashed thread) + event_current_thread = NodeData( + id="test-event-2", + data={ + "threads": { + "values": [ + { + "id": "1", + "name": "MainThread", + "state": "RUNNABLE", + "crashed": False, + "current": False, + }, + { + "id": "2", + "name": "CurrentThread", + "state": "RUNNING", + "crashed": False, + "current": True, + }, + ] + } + }, + ) + + # Should use current thread when no crashed thread + assert resolve_fingerprint_values(["{{ thread.name }}"], event_current_thread) == [ + "CurrentThread" + ] + assert resolve_fingerprint_values(["{{ thread.id }}"], event_current_thread) == ["2"] + assert resolve_fingerprint_values(["{{ thread.state }}"], event_current_thread) == ["RUNNING"] + + # Event with only regular threads (no crashed or current) + event_regular_threads = NodeData( + id="test-event-3", + data={ + "threads": { + "values": [ + { + "id": "1", + "name": "FirstThread", + "state": "RUNNABLE", + "crashed": False, + "current": False, + }, + { + "id": "2", + "name": "SecondThread", + "state": "WAITING", + "crashed": False, + "current": False, + }, + ] + } + }, + ) + + # Should use first thread when no crashed or current thread + assert resolve_fingerprint_values(["{{ thread.name }}"], event_regular_threads) == [ + "FirstThread" + ] + assert resolve_fingerprint_values(["{{ thread.id }}"], event_regular_threads) == ["1"] + assert resolve_fingerprint_values(["{{ thread.state }}"], event_regular_threads) == ["RUNNABLE"] + + # Event with no threads + event_no_threads = NodeData(id="test-event-4", data={}) + + # Should return fallback values when no threads + assert resolve_fingerprint_values(["{{ thread.name }}"], event_no_threads) == [ + "" + ] + assert resolve_fingerprint_values(["{{ thread.id }}"], event_no_threads) == [""] + assert resolve_fingerprint_values(["{{ thread.state }}"], event_no_threads) == [ + "" + ] + + # Event with threads but missing name/id/state + event_incomplete_threads = NodeData( + id="test-event-5", + data={ + "threads": { + "values": [ + {"crashed": False, "current": True}, # Missing name, id, state + ] + } + }, + ) + + # Should return fallback values when thread data is incomplete + assert resolve_fingerprint_values(["{{ thread.name }}"], event_incomplete_threads) == [ + "" + ] + assert resolve_fingerprint_values(["{{ thread.id }}"], event_incomplete_threads) == [ + "" + ] + assert resolve_fingerprint_values(["{{ thread.state }}"], event_incomplete_threads) == [ + "" + ] + + # Test combination with other variables + event_with_mixed = NodeData( + id="test-event-6", + data={ + "threads": { + "values": [ + { + "id": "42", + "name": "CrashedThread", + "state": "BLOCKED", + "crashed": True, + "current": False, + }, + ] + } + }, + ) + + assert resolve_fingerprint_values( + ["{{ default }}", "{{ thread.name }}", "custom-value"], event_with_mixed + ) == ["{{ default }}", "CrashedThread", "custom-value"] + + @with_fingerprint_input("input") @django_db_all # because of `options` usage def test_event_hash_variant(insta_snapshot: InstaSnapshotter, input: FingerprintInput) -> None: diff --git a/tests/sentry/grouping/test_strategies.py b/tests/sentry/grouping/test_strategies.py index e07caa61d77da8..61cd26035a77d5 100644 --- a/tests/sentry/grouping/test_strategies.py +++ b/tests/sentry/grouping/test_strategies.py @@ -299,3 +299,193 @@ def test_stacktrace_contribution_values_no_contributing_frames(self) -> None: assert ( system_stacktrace_component.hint == "ignored because it contains no contributing frames" ) + + +class ThreadGroupingTest(TestCase): + """Tests for thread metadata in automatic grouping""" + + def test_thread_name_grouping_enabled(self) -> None: + """Test that thread name contributes to grouping when enabled""" + from sentry.grouping.api import load_grouping_config + + # Create two events with same error but different threads + event_main_thread = save_new_event( + { + "exception": { + "values": [ + { + "type": "RuntimeError", + "value": "Database timeout", + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + "threads": { + "values": [ + { + "id": "1", + "name": "MainThread", + "crashed": True, + "current": False, + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + }, + self.project, + ) + + event_worker_thread = save_new_event( + { + "exception": { + "values": [ + { + "type": "RuntimeError", + "value": "Database timeout", + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + "threads": { + "values": [ + { + "id": "2", + "name": "WorkerThread", + "crashed": True, + "current": False, + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + }, + self.project, + ) + + # With thread name grouping enabled + config_with_threads = load_grouping_config( + {"id": "newstyle:2025-with-threads", "enhancements": ""} + ) + + variants_main = event_main_thread.get_grouping_variants( + force_config=config_with_threads._asdict() + ) + variants_worker = event_worker_thread.get_grouping_variants( + force_config=config_with_threads._asdict() + ) + + # They should have different hashes because thread names differ + assert variants_main["app"].get_hash() != variants_worker["app"].get_hash() + + def test_thread_name_grouping_disabled(self) -> None: + """Test that without thread grouping, threads don't affect grouping""" + from sentry.grouping.api import load_grouping_config + + event_main_thread = save_new_event( + { + "exception": { + "values": [ + { + "type": "RuntimeError", + "value": "Database timeout", + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + "threads": { + "values": [ + { + "id": "1", + "name": "MainThread", + "crashed": True, + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + }, + self.project, + ) + + event_worker_thread = save_new_event( + { + "exception": { + "values": [ + { + "type": "RuntimeError", + "value": "Database timeout", + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + "threads": { + "values": [ + { + "id": "2", + "name": "WorkerThread", + "crashed": True, + "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + } + ] + }, + }, + self.project, + ) + + # Default config without thread grouping + config_default = load_grouping_config({"id": "newstyle:2023-01-11", "enhancements": ""}) + + variants_main = event_main_thread.get_grouping_variants( + force_config=config_default._asdict() + ) + variants_worker = event_worker_thread.get_grouping_variants( + force_config=config_default._asdict() + ) + + # They should have the same hash - thread name doesn't matter + assert variants_main["app"].get_hash() == variants_worker["app"].get_hash() + + def test_thread_metadata_component_structure(self) -> None: + """Test that thread metadata components are structured correctly""" + from sentry.grouping.api import load_grouping_config + from sentry.grouping.component import ThreadNameGroupingComponent + + event = save_new_event( + { + "exception": { + "values": [ + { + "type": "ValueError", + "stacktrace": {"frames": [{"function": "main"}]}, + } + ] + }, + "threads": { + "values": [ + { + "name": "MainThread", + "crashed": True, + "stacktrace": {"frames": [{"function": "main"}]}, + } + ] + }, + }, + self.project, + ) + + config = load_grouping_config({"id": "newstyle:2025-with-threads", "enhancements": ""}) + + variants = event.get_grouping_variants(force_config=config._asdict()) + threads_component = variants["app"].component + + # Check that thread metadata is in the component tree + found_thread_name_component = False + for value in threads_component.values: + for sub_value in value.values: + if isinstance(sub_value, ThreadNameGroupingComponent): + found_thread_name_component = True + assert sub_value.values == ["MainThread"] + assert sub_value.contributes is True + break + + assert ( + found_thread_name_component + ), "ThreadNameGroupingComponent not found in component tree" From a792328f004f249ccc74bbae365d7507610c0c17 Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 12:16:18 +0100 Subject: [PATCH 3/7] Fix more type errors --- src/sentry/grouping/component.py | 12 ++++ src/sentry/grouping/fingerprinting/rules.py | 16 +++-- src/sentry/grouping/strategies/newstyle.py | 71 ++++++--------------- 3 files changed, 43 insertions(+), 56 deletions(-) diff --git a/src/sentry/grouping/component.py b/src/sentry/grouping/component.py index fad5891ce544b1..40058e58be7326 100644 --- a/src/sentry/grouping/component.py +++ b/src/sentry/grouping/component.py @@ -466,6 +466,7 @@ class ThreadsGroupingComponent(BaseGroupingComponent[StacktraceGroupingComponent id: str = "threads" key: str = "thread_stacktrace" frame_counts: Counter[str] + metadata: list[BaseGroupingComponent[str]] def __init__( self, @@ -473,9 +474,20 @@ def __init__( hint: str | None = None, contributes: bool | None = None, frame_counts: Counter[str] | None = None, + metadata: list[BaseGroupingComponent[str]] | None = None, ): super().__init__(hint=hint, contributes=contributes, values=values) self.frame_counts = frame_counts or Counter() + self.metadata = metadata or [] + + def get_hash_values(self) -> list[str]: + """Include both stacktrace values and metadata in hash calculation.""" + hash_values = super().get_hash_values() + # Add metadata component hashes if they contribute + for meta in self.metadata: + if meta.contributes: + hash_values.extend(meta.get_hash_values()) + return hash_values class CSPGroupingComponent( diff --git a/src/sentry/grouping/fingerprinting/rules.py b/src/sentry/grouping/fingerprinting/rules.py index 6268f708508d00..d4d1a76f525b84 100644 --- a/src/sentry/grouping/fingerprinting/rules.py +++ b/src/sentry/grouping/fingerprinting/rules.py @@ -69,16 +69,19 @@ def test_for_match_with_event( for matcher in self.matchers: if isinstance(matcher, (CallerMatcher, CalleeMatcher)): has_sibling_matchers = True - matchers_by_match_type.setdefault(matcher.match_type, []).append(matcher) + # Only add frame-related matchers to the dict for sibling matching + matchers_by_match_type.setdefault("frames", []).append(matcher) + else: + matchers_by_match_type.setdefault(matcher.match_type, []).append(matcher) # If we have sibling matchers, we need to match against frame sequences if has_sibling_matchers: return self._test_with_frame_context(event_datastore, matchers_by_match_type) - # Original logic for simple matchers + # Original logic for simple matchers (no CallerMatcher/CalleeMatcher here) for match_type, matchers in matchers_by_match_type.items(): for event_values in event_datastore.get_values(match_type): - if all(matcher.matches(event_values) for matcher in matchers): + if all(matcher.matches(event_values) for matcher in matchers): # type: ignore[call-arg] break else: return None @@ -94,7 +97,12 @@ def _test_with_frame_context( for match_type, matchers in matchers_by_match_type.items(): if match_type != "frames": for event_values in event_datastore.get_values(match_type): - if all(matcher.matches(event_values) for matcher in matchers): + # These are all FingerprintMatcher instances + if all( + m.matches(event_values) + for m in matchers + if isinstance(m, FingerprintMatcher) + ): break else: return None diff --git a/src/sentry/grouping/strategies/newstyle.py b/src/sentry/grouping/strategies/newstyle.py index 217c872e0613ae..412a2c825d65f5 100644 --- a/src/sentry/grouping/strategies/newstyle.py +++ b/src/sentry/grouping/strategies/newstyle.py @@ -22,6 +22,8 @@ NSErrorDomainGroupingComponent, NSErrorGroupingComponent, StacktraceGroupingComponent, + ThreadIdGroupingComponent, + ThreadNameGroupingComponent, ThreadsGroupingComponent, ) from sentry.grouping.strategies.base import ( @@ -881,84 +883,49 @@ def _get_thread_components( thread = threads[0] stacktrace = thread.get("stacktrace") - # Collect optional thread metadata components - # These allow grouping by thread properties when enabled - from sentry.grouping.component import ( - BaseGroupingComponent, - ThreadIdGroupingComponent, - ThreadNameGroupingComponent, - ) - - thread_metadata_components: list[BaseGroupingComponent[str]] = [] - # Check if config enables thread metadata in grouping via initial_context include_thread_name = context.get("include_thread_name_in_grouping", False) include_thread_id = context.get("include_thread_id_in_grouping", False) + # Collect thread metadata components + thread_metadata = [] if include_thread_name and thread.get("name"): - thread_metadata_components.append( + thread_metadata.append( ThreadNameGroupingComponent( - values=[thread["name"]], contributes=True, hint="thread name included in grouping" + values=[thread["name"]], + contributes=True, + hint="thread name included in grouping", ) ) if include_thread_id and thread.get("id"): - thread_metadata_components.append( + thread_metadata.append( ThreadIdGroupingComponent( - values=[str(thread["id"])], contributes=True, hint="thread id included in grouping" + values=[str(thread["id"])], + contributes=True, + hint="thread id included in grouping", ) ) - # If no stacktrace, check if we can group by thread metadata alone + # If no stacktrace, return early (thread metadata can't group without frames) if not stacktrace: - if thread_metadata_components: - from sentry.grouping.component import StacktraceGroupingComponent - - # Group by thread metadata when stacktrace is unavailable - # Wrap metadata in a StacktraceGroupingComponent for type compatibility - metadata_stacktrace = StacktraceGroupingComponent( - values=thread_metadata_components, - contributes=True, - hint="no stacktrace available, using thread metadata", - ) - return { - "app": ThreadsGroupingComponent( - values=[metadata_stacktrace], - contributes=True, - hint="no stacktrace available, grouping by thread metadata", - ) - } - # No stacktrace and no metadata = can't group return { "app": ThreadsGroupingComponent( contributes=False, hint="ignored because thread has no stacktrace" ) } - # Build components with stacktrace + optional thread metadata + # Build stacktrace components for each variant with thread metadata thread_components_by_variant = {} for variant_name, stacktrace_component in context.get_grouping_components_by_variant( stacktrace, event=event, **kwargs ).items(): - # If we have thread metadata, wrap the stacktrace component to include it - if thread_metadata_components: - from sentry.grouping.component import StacktraceGroupingComponent - - # Create a new stacktrace component that includes thread metadata - enhanced_stacktrace = StacktraceGroupingComponent( - values=list(stacktrace_component.values) + thread_metadata_components, - contributes=stacktrace_component.contributes, - hint=stacktrace_component.hint, - ) - thread_components_by_variant[variant_name] = ThreadsGroupingComponent( - values=[enhanced_stacktrace], frame_counts=stacktrace_component.frame_counts - ) - else: - # No thread metadata, just use the stacktrace as-is - thread_components_by_variant[variant_name] = ThreadsGroupingComponent( - values=[stacktrace_component], frame_counts=stacktrace_component.frame_counts - ) + thread_components_by_variant[variant_name] = ThreadsGroupingComponent( + values=[stacktrace_component], + frame_counts=stacktrace_component.frame_counts, + metadata=thread_metadata, + ) return thread_components_by_variant From e9e03f55c6af6f6353b3511cc77abb4e2bef0307 Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 13:20:09 +0100 Subject: [PATCH 4/7] Adapt logic and fix tests --- src/sentry/grouping/component.py | 10 +- src/sentry/grouping/enhancer/matchers.py | 60 +------- src/sentry/grouping/fingerprinting/parser.py | 22 ++- src/sentry/grouping/strategies/newstyle.py | 3 +- tests/sentry/grouping/test_enhancer.py | 115 --------------- tests/sentry/grouping/test_fingerprinting.py | 4 +- tests/sentry/grouping/test_strategies.py | 146 ++++++++----------- 7 files changed, 95 insertions(+), 265 deletions(-) diff --git a/src/sentry/grouping/component.py b/src/sentry/grouping/component.py index 40058e58be7326..fb66beaf29383c 100644 --- a/src/sentry/grouping/component.py +++ b/src/sentry/grouping/component.py @@ -480,14 +480,14 @@ def __init__( self.frame_counts = frame_counts or Counter() self.metadata = metadata or [] - def get_hash_values(self) -> list[str]: + def iter_values(self) -> Generator[str | int]: """Include both stacktrace values and metadata in hash calculation.""" - hash_values = super().get_hash_values() - # Add metadata component hashes if they contribute + # First yield values from stacktrace components + yield from super().iter_values() + # Then yield values from metadata components for meta in self.metadata: if meta.contributes: - hash_values.extend(meta.get_hash_values()) - return hash_values + yield from meta.iter_values() class CSPGroupingComponent( diff --git a/src/sentry/grouping/enhancer/matchers.py b/src/sentry/grouping/enhancer/matchers.py index b361feb2e88c3d..17927a1d200998 100644 --- a/src/sentry/grouping/enhancer/matchers.py +++ b/src/sentry/grouping/enhancer/matchers.py @@ -78,12 +78,6 @@ def _cached( # fingerprinting-specific fields "family": "family", "app": "app", - # thread context fields (available when processing threads) - "thread.name": "thread_name", - "thread.id": "thread_id", - "thread.state": "thread_state", - "thread.crashed": "thread_crashed", - "thread.current": "thread_current", } @@ -96,29 +90,11 @@ class MatchFrame(TypedDict): module: bytes | None package: bytes | None path: bytes | None - # Thread context (optional, only present when frame belongs to a thread) - thread_name: bytes | None - thread_id: bytes | None - thread_state: bytes | None - thread_crashed: bool | None - thread_current: bool | None # TODO: Maybe someday mypy won't make us keep this as a separate list MatchFrameKey = Literal[ - "category", - "family", - "function", - "in_app", - "orig_in_app", - "module", - "package", - "path", - "thread_name", - "thread_id", - "thread_state", - "thread_crashed", - "thread_current", + "category", "family", "function", "in_app", "orig_in_app", "module", "package", "path" ] @@ -128,16 +104,8 @@ def _get_function_name(frame_data: dict[str, Any], platform: str | None) -> str: return function_name or "" -def create_match_frame( - frame_data: dict[str, Any], platform: str | None, thread_data: dict[str, Any] | None = None -) -> MatchFrame: - """Create flat dict of values relevant to matchers - - Args: - frame_data: Frame information - platform: Platform string - thread_data: Optional thread context (name, id, state, crashed, current) - """ +def create_match_frame(frame_data: dict[str, Any], platform: str | None) -> MatchFrame: + """Create flat dict of values relevant to matchers""" match_frame = dict( category=get_path(frame_data, "data", "category"), family=get_behavior_family_for_platform(frame_data.get("platform") or platform), @@ -147,12 +115,6 @@ def create_match_frame( module=get_path(frame_data, "module"), package=frame_data.get("package"), path=frame_data.get("abs_path") or frame_data.get("filename"), - # Thread context (if available) - thread_name=thread_data.get("name") if thread_data else None, - thread_id=str(thread_data.get("id")) if thread_data and thread_data.get("id") else None, - thread_state=thread_data.get("state") if thread_data else None, - thread_crashed=bool(thread_data.get("crashed")) if thread_data else None, - thread_current=bool(thread_data.get("current")) if thread_data else None, ) for key in list(match_frame.keys()): @@ -161,14 +123,11 @@ def create_match_frame( if isinstance(value, str): value = match_frame[key] = value.encode("utf-8") - if key in ("package", "path", "thread_name", "thread_id", "thread_state"): - # NOTE: path-like and thread matchers are case insensitive + if key in ("package", "path"): + # NOTE: path-like matchers are case insensitive, and normalize + # file-system separators to `/`. # We do this here in a central place instead of in each matcher separately. - if key in ("package", "path"): - # Also normalize file-system separators to `/` for paths - value = match_frame[key] = value.lower().replace(b"\\", b"/") - else: - value = match_frame[key] = value.lower() + value = match_frame[key] = value.lower().replace(b"\\", b"/") return MatchFrame( category=match_frame["category"], @@ -179,11 +138,6 @@ def create_match_frame( module=match_frame["module"], package=match_frame["package"], path=match_frame["path"], - thread_name=match_frame.get("thread_name"), - thread_id=match_frame.get("thread_id"), - thread_state=match_frame.get("thread_state"), - thread_crashed=match_frame.get("thread_crashed"), - thread_current=match_frame.get("thread_current"), ) diff --git a/src/sentry/grouping/fingerprinting/parser.py b/src/sentry/grouping/fingerprinting/parser.py index 64aee00cb60bb2..67432316577f5d 100644 --- a/src/sentry/grouping/fingerprinting/parser.py +++ b/src/sentry/grouping/fingerprinting/parser.py @@ -92,7 +92,12 @@ def visit_rule( self, _: object, children: tuple[ - object, list[FingerprintMatcher], object, object, object, FingerprintWithAttributes + object, + list[FingerprintMatcher | CallerMatcher | CalleeMatcher], + object, + object, + object, + FingerprintWithAttributes, ], ) -> FingerprintRule: _, matchers, _, _, _, (fingerprint, attributes) = children @@ -109,11 +114,22 @@ def visit_matchers( ) -> list[FingerprintMatcher | CallerMatcher | CalleeMatcher]: caller_matcher, frame_matchers, callee_matcher = children result: list[FingerprintMatcher | CallerMatcher | CalleeMatcher] = [] - if caller_matcher: + + # Parsimonious wraps optional matches (? quantifier) in an extra list + # Flatten caller_matcher if it's a nested list + if caller_matcher and len(caller_matcher) > 0 and isinstance(caller_matcher[0], list): + result.extend(caller_matcher[0]) + elif caller_matcher: result.extend(caller_matcher) + result.extend(frame_matchers) - if callee_matcher: + + # Flatten callee_matcher if it's a nested list + if callee_matcher and len(callee_matcher) > 0 and isinstance(callee_matcher[0], list): + result.extend(callee_matcher[0]) + elif callee_matcher: result.extend(callee_matcher) + return result def visit_caller_matcher( diff --git a/src/sentry/grouping/strategies/newstyle.py b/src/sentry/grouping/strategies/newstyle.py index 412a2c825d65f5..f785b57392dbd6 100644 --- a/src/sentry/grouping/strategies/newstyle.py +++ b/src/sentry/grouping/strategies/newstyle.py @@ -8,6 +8,7 @@ from typing import TYPE_CHECKING, Any from sentry.grouping.component import ( + BaseGroupingComponent, ChainedExceptionGroupingComponent, ContextLineGroupingComponent, ErrorTypeGroupingComponent, @@ -888,7 +889,7 @@ def _get_thread_components( include_thread_id = context.get("include_thread_id_in_grouping", False) # Collect thread metadata components - thread_metadata = [] + thread_metadata: list[BaseGroupingComponent[str]] = [] if include_thread_name and thread.get("name"): thread_metadata.append( ThreadNameGroupingComponent( diff --git a/tests/sentry/grouping/test_enhancer.py b/tests/sentry/grouping/test_enhancer.py index 913e71df0b266a..b4200b5ffe676d 100644 --- a/tests/sentry/grouping/test_enhancer.py +++ b/tests/sentry/grouping/test_enhancer.py @@ -872,118 +872,3 @@ def test_marks_system_frames_non_contributing_in_app_variant(self) -> None: self.assert_frame_values_match_expected( app_stacktrace_component, expected_frame_results=app_expected_frame_results ) - - -def test_thread_context_matchers() -> None: - """Test that thread context is available in frame matchers""" - from sentry.grouping.enhancer.matchers import create_match_frame - - # Create a frame with thread context - frame = {"function": "processData", "module": "app.handlers"} - thread_data = { - "name": "MainThread", - "id": "123", - "state": "RUNNABLE", - "crashed": True, - "current": False, - } - - match_frame = create_match_frame(frame, "python", thread_data) - - # Verify thread context is present - assert match_frame["thread_name"] == b"mainthread" # lowercased - assert match_frame["thread_id"] == b"123" - assert match_frame["thread_state"] == b"runnable" # lowercased - assert match_frame["thread_crashed"] is True - assert match_frame["thread_current"] is False - - -def test_thread_name_enhancement_rule() -> None: - """Test enhancement rules with thread.name matcher""" - from sentry.grouping.enhancer import EnhancementsConfig - - enhancements = EnhancementsConfig.from_rules_text( - """ - thread.name:MainThread +app - thread.name:Worker* -group - thread.crashed:true category=fatal - """ - ) - - # Verify the rule structure was parsed correctly - assert len(enhancements.rules) == 3 - assert enhancements.rules[0].matchers.matcher.key == b"thread_name" - assert enhancements.rules[0].matchers.matcher.pattern == b"MainThread" - - -def test_thread_crashed_enhancement_rule() -> None: - """Test enhancement rules with thread.crashed matcher""" - from sentry.grouping.enhancer.matchers import create_match_frame - - frame = {"function": "main", "module": "app"} - - # Crashed thread - thread_crashed = {"name": "MainThread", "crashed": True} - match_frame_crashed = create_match_frame(frame, "python", thread_crashed) - assert match_frame_crashed["thread_crashed"] is True - - # Not crashed thread - thread_not_crashed = {"name": "MainThread", "crashed": False} - match_frame_not_crashed = create_match_frame(frame, "python", thread_not_crashed) - assert match_frame_not_crashed["thread_crashed"] is False - - -def test_thread_matchers_in_matchers_dict() -> None: - """Test that thread matchers are registered in MATCHERS dict""" - from sentry.grouping.enhancer.matchers import MATCHERS - - assert "thread.name" in MATCHERS - assert "thread.id" in MATCHERS - assert "thread.state" in MATCHERS - assert "thread.crashed" in MATCHERS - assert "thread.current" in MATCHERS - - assert MATCHERS["thread.name"] == "thread_name" - assert MATCHERS["thread.id"] == "thread_id" - assert MATCHERS["thread.state"] == "thread_state" - assert MATCHERS["thread.crashed"] == "thread_crashed" - assert MATCHERS["thread.current"] == "thread_current" - - -def test_create_match_frame_without_thread_context() -> None: - """Test that frames can still be created without thread context (backward compatibility)""" - from sentry.grouping.enhancer.matchers import create_match_frame - - frame = {"function": "handler", "module": "app"} - - # Call without thread_data parameter - match_frame = create_match_frame(frame, "python") - - # Thread fields should be None - assert match_frame["thread_name"] is None - assert match_frame["thread_id"] is None - assert match_frame["thread_state"] is None - assert match_frame["thread_crashed"] is None - assert match_frame["thread_current"] is None - - # Regular frame fields should still work - assert match_frame["function"] == b"handler" - assert match_frame["module"] == b"app" - - -def test_thread_context_with_wildcard_patterns() -> None: - """Test thread matchers with wildcard patterns""" - from sentry.grouping.enhancer import EnhancementsConfig - - enhancements = EnhancementsConfig.from_rules_text( - """ - thread.name:Worker* -group - thread.state:RUN* category=active - """ - ) - - assert len(enhancements.rules) == 2 - - # Verify patterns were parsed - assert enhancements.rules[0].matchers.matcher.pattern == b"Worker*" - assert enhancements.rules[1].matchers.matcher.pattern == b"RUN*" diff --git a/tests/sentry/grouping/test_fingerprinting.py b/tests/sentry/grouping/test_fingerprinting.py index dacc3eda0b7110..ca34bbeda4eeba 100644 --- a/tests/sentry/grouping/test_fingerprinting.py +++ b/tests/sentry/grouping/test_fingerprinting.py @@ -665,14 +665,14 @@ def test_thread_matchers_negation() -> None: assert match is not None assert match.fingerprint == ["not-crashed"] - # Event without MainThread + # Event without MainThread but with crashed=True to avoid matching the first rule event_not_main = { "threads": { "values": [ { "id": "2", "name": "BackgroundThread", - "crashed": False, + "crashed": True, # Must be crashed to not match first rule "current": False, } ] diff --git a/tests/sentry/grouping/test_strategies.py b/tests/sentry/grouping/test_strategies.py index 61cd26035a77d5..ea438ad5a72e41 100644 --- a/tests/sentry/grouping/test_strategies.py +++ b/tests/sentry/grouping/test_strategies.py @@ -2,7 +2,12 @@ import pytest -from sentry.grouping.component import StacktraceGroupingComponent +from sentry.grouping.api import load_grouping_config +from sentry.grouping.component import ( + StacktraceGroupingComponent, + ThreadNameGroupingComponent, + ThreadsGroupingComponent, +) from sentry.grouping.strategies.base import GroupingContext, create_strategy_configuration_class from sentry.services.eventstore.models import Event from sentry.testutils.cases import TestCase @@ -306,20 +311,10 @@ class ThreadGroupingTest(TestCase): def test_thread_name_grouping_enabled(self) -> None: """Test that thread name contributes to grouping when enabled""" - from sentry.grouping.api import load_grouping_config - - # Create two events with same error but different threads + # Create two events with same stacktrace but different thread names + # Use threads-only (no exception) to test thread grouping event_main_thread = save_new_event( { - "exception": { - "values": [ - { - "type": "RuntimeError", - "value": "Database timeout", - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, - } - ] - }, "threads": { "values": [ { @@ -327,7 +322,11 @@ def test_thread_name_grouping_enabled(self) -> None: "name": "MainThread", "crashed": True, "current": False, - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + "stacktrace": { + "frames": [ + {"function": "query", "module": "app.db", "in_app": True} + ] + }, } ] }, @@ -337,15 +336,6 @@ def test_thread_name_grouping_enabled(self) -> None: event_worker_thread = save_new_event( { - "exception": { - "values": [ - { - "type": "RuntimeError", - "value": "Database timeout", - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, - } - ] - }, "threads": { "values": [ { @@ -353,7 +343,11 @@ def test_thread_name_grouping_enabled(self) -> None: "name": "WorkerThread", "crashed": True, "current": False, - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + "stacktrace": { + "frames": [ + {"function": "query", "module": "app.db", "in_app": True} + ] + }, } ] }, @@ -363,41 +357,38 @@ def test_thread_name_grouping_enabled(self) -> None: # With thread name grouping enabled config_with_threads = load_grouping_config( - {"id": "newstyle:2025-with-threads", "enhancements": ""} + {"id": "newstyle:2025-with-threads", "enhancements": None} ) - variants_main = event_main_thread.get_grouping_variants( - force_config=config_with_threads._asdict() - ) + variants_main = event_main_thread.get_grouping_variants(force_config=config_with_threads) variants_worker = event_worker_thread.get_grouping_variants( - force_config=config_with_threads._asdict() + force_config=config_with_threads ) # They should have different hashes because thread names differ - assert variants_main["app"].get_hash() != variants_worker["app"].get_hash() + assert variants_main["app"].get_hash() is not None, "Main thread variant should have a hash" + assert ( + variants_worker["app"].get_hash() is not None + ), "Worker thread variant should have a hash" + assert ( + variants_main["app"].get_hash() != variants_worker["app"].get_hash() + ), "Different thread names should produce different hashes" def test_thread_name_grouping_disabled(self) -> None: """Test that without thread grouping, threads don't affect grouping""" - from sentry.grouping.api import load_grouping_config - event_main_thread = save_new_event( { - "exception": { - "values": [ - { - "type": "RuntimeError", - "value": "Database timeout", - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, - } - ] - }, "threads": { "values": [ { "id": "1", "name": "MainThread", "crashed": True, - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + "stacktrace": { + "frames": [ + {"function": "query", "module": "app.db", "in_app": True} + ] + }, } ] }, @@ -407,22 +398,17 @@ def test_thread_name_grouping_disabled(self) -> None: event_worker_thread = save_new_event( { - "exception": { - "values": [ - { - "type": "RuntimeError", - "value": "Database timeout", - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, - } - ] - }, "threads": { "values": [ { "id": "2", "name": "WorkerThread", "crashed": True, - "stacktrace": {"frames": [{"function": "query", "module": "app.db"}]}, + "stacktrace": { + "frames": [ + {"function": "query", "module": "app.db", "in_app": True} + ] + }, } ] }, @@ -431,39 +417,24 @@ def test_thread_name_grouping_disabled(self) -> None: ) # Default config without thread grouping - config_default = load_grouping_config({"id": "newstyle:2023-01-11", "enhancements": ""}) + config_default = load_grouping_config({"id": "newstyle:2023-01-11", "enhancements": None}) - variants_main = event_main_thread.get_grouping_variants( - force_config=config_default._asdict() - ) - variants_worker = event_worker_thread.get_grouping_variants( - force_config=config_default._asdict() - ) + variants_main = event_main_thread.get_grouping_variants(force_config=config_default) + variants_worker = event_worker_thread.get_grouping_variants(force_config=config_default) - # They should have the same hash - thread name doesn't matter + # They should have the same hash - thread name doesn't matter without the config assert variants_main["app"].get_hash() == variants_worker["app"].get_hash() def test_thread_metadata_component_structure(self) -> None: """Test that thread metadata components are structured correctly""" - from sentry.grouping.api import load_grouping_config - from sentry.grouping.component import ThreadNameGroupingComponent - event = save_new_event( { - "exception": { - "values": [ - { - "type": "ValueError", - "stacktrace": {"frames": [{"function": "main"}]}, - } - ] - }, "threads": { "values": [ { "name": "MainThread", "crashed": True, - "stacktrace": {"frames": [{"function": "main"}]}, + "stacktrace": {"frames": [{"function": "main", "in_app": True}]}, } ] }, @@ -471,21 +442,24 @@ def test_thread_metadata_component_structure(self) -> None: self.project, ) - config = load_grouping_config({"id": "newstyle:2025-with-threads", "enhancements": ""}) + config = load_grouping_config({"id": "newstyle:2025-with-threads", "enhancements": None}) - variants = event.get_grouping_variants(force_config=config._asdict()) - threads_component = variants["app"].component + variants = event.get_grouping_variants(force_config=config) + threads_component = variants["app"].contributing_component - # Check that thread metadata is in the component tree - found_thread_name_component = False - for value in threads_component.values: - for sub_value in value.values: - if isinstance(sub_value, ThreadNameGroupingComponent): - found_thread_name_component = True - assert sub_value.values == ["MainThread"] - assert sub_value.contributes is True - break + # The contributing component should be a ThreadsGroupingComponent + assert isinstance(threads_component, ThreadsGroupingComponent) + # Check that thread metadata is accessible + assert len(threads_component.metadata) > 0, "Thread metadata should be present" + + # Find the ThreadNameGroupingComponent in metadata + thread_name_component = next( + (m for m in threads_component.metadata if isinstance(m, ThreadNameGroupingComponent)), + None, + ) assert ( - found_thread_name_component - ), "ThreadNameGroupingComponent not found in component tree" + thread_name_component is not None + ), "ThreadNameGroupingComponent not found in metadata" + assert thread_name_component.values == ["MainThread"] + assert thread_name_component.contributes is True From 6c3eda794243aae6ad488c88f250ebe425aa2c6e Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 13:26:47 +0100 Subject: [PATCH 5/7] Remove Thread ID from grouping rule --- src/sentry/grouping/component.py | 4 ---- src/sentry/grouping/strategies/configurations.py | 7 +++---- src/sentry/grouping/strategies/newstyle.py | 15 ++------------- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/src/sentry/grouping/component.py b/src/sentry/grouping/component.py index fb66beaf29383c..318efca918b207 100644 --- a/src/sentry/grouping/component.py +++ b/src/sentry/grouping/component.py @@ -273,10 +273,6 @@ class NSErrorGroupingComponent( id: str = "ns_error" -class ThreadIdGroupingComponent(BaseGroupingComponent[str]): - id: str = "thread_id" - - class ThreadNameGroupingComponent(BaseGroupingComponent[str]): id: str = "thread_name" diff --git a/src/sentry/grouping/strategies/configurations.py b/src/sentry/grouping/strategies/configurations.py index 35f68d7d97bedd..5b0410af9639c1 100644 --- a/src/sentry/grouping/strategies/configurations.py +++ b/src/sentry/grouping/strategies/configurations.py @@ -79,10 +79,9 @@ def register_grouping_config(id: str, **kwargs) -> type[StrategyConfiguration]: id=THREAD_GROUPING_CONFIG, base=FALL_2025_GROUPING_CONFIG, initial_context={ - # Enable thread metadata in automatic grouping - # When enabled, errors in different threads will create separate issues - "include_thread_name_in_grouping": True, - "include_thread_id_in_grouping": False, # Usually name is more useful than id + # Enable thread name in automatic grouping + # When enabled, errors in different threads (by name) will create separate issues + "include_thread_name_in_grouping": True }, enhancements_base="all-platforms:2025-11-21", ) diff --git a/src/sentry/grouping/strategies/newstyle.py b/src/sentry/grouping/strategies/newstyle.py index f785b57392dbd6..cd551fe88e8786 100644 --- a/src/sentry/grouping/strategies/newstyle.py +++ b/src/sentry/grouping/strategies/newstyle.py @@ -23,7 +23,6 @@ NSErrorDomainGroupingComponent, NSErrorGroupingComponent, StacktraceGroupingComponent, - ThreadIdGroupingComponent, ThreadNameGroupingComponent, ThreadsGroupingComponent, ) @@ -884,11 +883,10 @@ def _get_thread_components( thread = threads[0] stacktrace = thread.get("stacktrace") - # Check if config enables thread metadata in grouping via initial_context + # Check if config enables thread name in grouping via initial_context include_thread_name = context.get("include_thread_name_in_grouping", False) - include_thread_id = context.get("include_thread_id_in_grouping", False) - # Collect thread metadata components + # Collect thread metadata components (only thread name, as IDs are random) thread_metadata: list[BaseGroupingComponent[str]] = [] if include_thread_name and thread.get("name"): thread_metadata.append( @@ -899,15 +897,6 @@ def _get_thread_components( ) ) - if include_thread_id and thread.get("id"): - thread_metadata.append( - ThreadIdGroupingComponent( - values=[str(thread["id"])], - contributes=True, - hint="thread id included in grouping", - ) - ) - # If no stacktrace, return early (thread metadata can't group without frames) if not stacktrace: return { From 715ecf7549ab894df3a638fd57218b376caf0cf2 Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 14:02:16 +0100 Subject: [PATCH 6/7] Fix tests --- .../newstyle@2025_with_threads/actix.pysnap | 601 ++ .../android_anr.pysnap | 40 + .../aspnetcore.pysnap | 210 + .../block_invoke.pysnap | 39 + .../newstyle@2025_with_threads/bugly.pysnap | 42 + ...uilt_in_fingerprint_chunkload_error.pysnap | 28 + ..._chunkload_error_hybrid_fingerprint.pysnap | 29 + .../callee_guaranteed.pysnap | 79 + .../checksum_no_regex_match.pysnap | 23 + .../checksum_regex_match.pysnap | 21 + .../cocoa_dispatch_client_callout.pysnap | 68 + .../connection_error.pysnap | 157 + .../contributing_system_and_app_frames.pysnap | 66 + .../contributing_system_frames.pysnap | 42 + .../newstyle@2025_with_threads/csp.pysnap | 34 + .../csp_img_src.pysnap | 34 + .../csp_no_blocked_uri.pysnap | 34 + .../csp_script_data_uri.pysnap | 34 + .../csp_script_src_unsafe_eval.pysnap | 35 + .../csp_script_src_unsafe_inline.pysnap | 35 + .../csp_script_src_uri.pysnap | 34 + .../csp_style_src_elem.pysnap | 34 + .../custom_fingerprint_client.pysnap | 28 + ..._fingerprint_client_and_server_rule.pysnap | 29 + .../custom_fingerprint_server_rule.pysnap | 28 + .../newstyle@2025_with_threads/empty.pysnap | 23 + .../exception_cocoa_nserror.pysnap | 37 + .../exception_compute_hashes.pysnap | 34 + .../exception_compute_hashes_2.pysnap | 38 + .../exception_compute_hashes_3.pysnap | 46 + .../exception_groups_bad_duplicate_id.pysnap | 45 + ...ion_groups_bad_inner_self_parenting.pysnap | 40 + ...d_inner_self_parenting_duplicate_id.pysnap | 40 + ...exception_groups_bad_missing_parent.pysnap | 34 + .../exception_groups_bad_no_root.pysnap | 40 + ...xception_groups_bad_out_of_sequence.pysnap | 40 + ...tion_groups_bad_root_self_parenting.pysnap | 40 + ...tion_groups_bad_solo_self_parenting.pysnap | 34 + .../exception_groups_bad_with_cycle.pysnap | 34 + .../exception_groups_one_exception.pysnap | 34 + ...groups_one_type_under_nested_groups.pysnap | 34 + ...oups_one_type_with_different_values.pysnap | 45 + ...groups_one_type_with_similar_values.pysnap | 34 + ...pe_with_similar_values_and_children.pysnap | 40 + ...n_groups_two_exceptions_with_frames.pysnap | 90 + .../exception_groups_two_types.pysnap | 45 + ...roups_two_types_under_nested_groups.pysnap | 45 + .../exception_javascript_no_in_app.pysnap | 45 + .../exception_without_type.pysnap | 32 + .../exception_without_value.pysnap | 32 + .../expectct.pysnap | 33 + .../fallback_prefix_level_1.pysnap | 41 + ...es_ignores_ENHANCED_clojure_classes.pysnap | 37 + .../frame_empty_list.pysnap | 23 + ...gnores_ENHANCED_enhancer_by_classes.pysnap | 37 + ...ores_ENHANCED_fast_class_by_classes.pysnap | 37 + ...ame_ignores_ENHANCED_spring_classes.pysnap | 37 + .../frame_ignores_dartlang_sdk.pysnap | 23 + ...ores_extra_ENHANCED_clojure_classes.pysnap | 37 + ..._extra_ENHANCED_enhancer_by_classes.pysnap | 37 + ...nores_extra_ENHANCED_spring_classes.pysnap | 37 + ...lename_from_url_origin_corner_cases.pysnap | 44 + ...gnores_filename_if_abs_path_is_http.pysnap | 35 + .../frame_ignores_filename_if_blob.pysnap | 23 + .../frame_ignores_filename_if_http.pysnap | 37 + .../frame_ignores_filename_if_https.pysnap | 37 + .../frame_ignores_flutter_sdk.pysnap | 37 + .../frame_ignores_hibernate_classes.pysnap | 37 + ...frame_ignores_java8_lambda_function.pysnap | 35 + .../frame_ignores_java8_lambda_module.pysnap | 35 + .../frame_ignores_javassist.pysnap | 37 + .../frame_ignores_javassist_2.pysnap | 37 + .../frame_ignores_javassist_3.pysnap | 37 + .../frame_ignores_module_if_page_url.pysnap | 23 + .../frame_ignores_module_if_page_url_2.pysnap | 35 + .../frame_ignores_safari_native_code.pysnap | 35 + .../frame_ignores_sentry_dart_packages.pysnap | 23 + .../frame_ignores_sentry_dart_sdk.pysnap | 23 + .../frame_ignores_sentry_flutter_sdk.pysnap | 23 + ...res_sun_java_generated_constructors.pysnap | 37 + ...s_sun_java_generated_constructors_2.pysnap | 37 + ..._ignores_sun_java_generated_methods.pysnap | 42 + .../frame_sanitizes_block_functions.pysnap | 37 + .../frame_sanitizes_erb_templates.pysnap | 37 + ...frame_sanitizes_versioned_filenames.pysnap | 35 + ...ame_sanitizes_versioned_filenames_2.pysnap | 35 + ...ame_uses_context_line_over_function.pysnap | 37 + .../frame_uses_module_over_filename.pysnap | 35 + .../frame_with_only_required_vars.pysnap | 35 + .../go_pkg_mod.pysnap | 60 + .../group_125_event_126.pysnap | 42 + .../group_200_event_200.pysnap | 48 + .../group_275_event_275.pysnap | 42 + .../group_289_event_312.pysnap | 51 + .../group_294_event_294.pysnap | 53 + .../group_294_event_329.pysnap | 53 + .../group_307_event_307.pysnap | 36 + .../group_307_event_657.pysnap | 36 + .../group_313_event_313.pysnap | 48 + .../group_313_event_333.pysnap | 48 + .../group_319_event_321.pysnap | 57 + .../group_389_event_389.pysnap | 36 + .../group_432_event_432.pysnap | 54 + .../group_432_event_453.pysnap | 51 + .../group_445_event_445.pysnap | 62 + .../newstyle@2025_with_threads/hpkp.pysnap | 33 + .../hybrid_fingerprint_base.pysnap | 40 + ...erprint_custom_client_hybrid_server.pysnap | 257 + ...erprint_hybrid_client_custom_server.pysnap | 29 + ...rprint_same_default_different_extra.pysnap | 40 + ...rprint_same_extra_different_default.pysnap | 40 + .../in_app_in_ui.pysnap | 167 + .../java_chained.pysnap | 289 + .../java_minimal.pysnap | 280 + ...cript_exception_fallback_to_message.pysnap | 34 + ...eption_fallback_to_message_whistles.pysnap | 34 + .../javascript_exception_no_in_app.pysnap | 95 + .../javascript_message.pysnap | 31 + ...javascript_message_parameterization.pysnap | 31 + .../javascript_polyfills.pysnap | 34 + .../javascript_unpkg.pysnap | 49 + .../javascript_xbrowser_chrome.pysnap | 71 + .../javascript_xbrowser_edge.pysnap | 71 + .../javascript_xbrowser_firefox.pysnap | 71 + .../javascript_xbrowser_http_chrome.pysnap | 71 + .../javascript_xbrowser_http_edge.pysnap | 71 + .../javascript_xbrowser_http_firefox.pysnap | 71 + .../javascript_xbrowser_http_safari.pysnap | 71 + .../javascript_xbrowser_safari.pysnap | 71 + ...avascript_xbrowser_sentryui_firefox.pysnap | 155 + ...javascript_xbrowser_sentryui_safari.pysnap | 135 + .../newstyle@2025_with_threads/laravel.pysnap | 412 + .../laravel_anonymous.pysnap | 69 + .../logentry_prefers_message.pysnap | 31 + .../logentry_uses_formatted.pysnap | 31 + .../macos_amd_driver.pysnap | 48 + .../macos_intel_driver.pysnap | 57 + .../malloc_sentinel.pysnap | 55 + .../message_prefers_message.pysnap | 31 + .../message_uses_formatted.pysnap | 31 + .../message_with_key_pair_values.pysnap | 31 + .../minified_javascript.pysnap | 127 + .../native_complex_function_names.pysnap | 39 + .../native_driver_crash1.pysnap | 42 + .../native_driver_crash2.pysnap | 36 + .../native_driver_crash3.pysnap | 42 + .../native_limit_frames.pysnap | 36 + .../native_malloc_chain.pysnap | 39 + .../native_no_filenames.pysnap | 83 + .../native_unlimited_frames.pysnap | 39 + .../native_windows_anon_namespace.pysnap | 48 + .../native_with_function_name.pysnap | 53 + .../node_exception_weird.pysnap | 141 + .../node_low_level_async.pysnap | 34 + .../python_exception_base.pysnap | 65 + ...n_grouping_enhancer_away_from_crash.pysnap | 80 + ...hon_grouping_enhancer_towards_crash.pysnap | 56 + .../python_http_error.pysnap | 80 + .../react_concurrent_rendering.pysnap | 40 + ...react_concurrent_rendering_no_cause.pysnap | 34 + ...t_concurrent_rendering_no_mechanism.pysnap | 40 + .../react_native.pysnap | 163 + .../stacktrace_cocoa.pysnap | 48 + .../stacktrace_collapse_recursion.pysnap | 57 + .../stacktrace_compute_hashes.pysnap | 48 + ...ce_discards_seemingly_useless_stack.pysnap | 23 + ...tacktrace_does_not_discard_non_urls.pysnap | 35 + ..._does_not_group_different_js_errors.pysnap | 23 + .../stacktrace_enforce_min_frames.pysnap | 53 + ...acktrace_excludes_single_frame_urls.pysnap | 35 + ...acktrace_hash_without_system_frames.pysnap | 38 + ...ce_ignores_singular_anonymous_frame.pysnap | 42 + .../stacktrace_negated_match.pysnap | 38 + .../stacktrace_rust.pysnap | 66 + .../stacktrace_rust2.pysnap | 60 + .../stacktrace_with_minimal_app_frames.pysnap | 48 + .../template_compute_hashes.pysnap | 30 + .../threads_compute_hashes.pysnap | 38 + .../threads_no_hash.pysnap | 23 + .../newstyle@2025_with_threads/unity.pysnap | 90 + .../unknown_variant.pysnap | 21 + .../unreal_assert_mac.pysnap | 207 + ...unreal_assertion_check_fail_android.pysnap | 146 + ...eal_assertion_check_fail_on_windows.pysnap | 246 + .../unreal_ensure_check_fail_on_mac.pysnap | 195 + ...unreal_ensure_check_fail_on_windows.pysnap | 274 + .../unreal_event_capture_mac.pysnap | 206 + .../newstyle@2025_with_threads/actix.pysnap | 5221 +++++++++++ .../android_anr.pysnap | 7879 +++++++++++++++++ .../aspnetcore.pysnap | 2242 +++++ .../block_invoke.pysnap | 342 + .../newstyle@2025_with_threads/bugly.pysnap | 623 ++ ...uilt_in_fingerprint_chunkload_error.pysnap | 229 + ..._chunkload_error_hybrid_fingerprint.pysnap | 233 + .../callee_guaranteed.pysnap | 2153 +++++ .../checksum_no_regex_match.pysnap | 17 + .../checksum_regex_match.pysnap | 16 + .../cocoa_dispatch_client_callout.pysnap | 1086 +++ .../connection_error.pysnap | 1160 +++ .../contributing_system_and_app_frames.pysnap | 483 + .../contributing_system_frames.pysnap | 399 + .../newstyle@2025_with_threads/csp.pysnap | 85 + .../csp_img_src.pysnap | 76 + .../csp_no_blocked_uri.pysnap | 76 + .../csp_script_data_uri.pysnap | 76 + .../csp_script_src_unsafe_eval.pysnap | 87 + .../csp_script_src_unsafe_inline.pysnap | 87 + .../csp_script_src_uri.pysnap | 76 + .../csp_style_src_elem.pysnap | 85 + .../custom_fingerprint_client.pysnap | 1661 ++++ ..._fingerprint_client_and_server_rule.pysnap | 1660 ++++ .../custom_fingerprint_server_rule.pysnap | 1655 ++++ .../newstyle@2025_with_threads/empty.pysnap | 15 + .../exception_cocoa_nserror.pysnap | 1596 ++++ .../exception_compute_hashes.pysnap | 76 + .../exception_compute_hashes_2.pysnap | 209 + .../exception_compute_hashes_3.pysnap | 355 + .../exception_groups_bad_duplicate_id.pysnap | 150 + ...ion_groups_bad_inner_self_parenting.pysnap | 117 + ...d_inner_self_parenting_duplicate_id.pysnap | 117 + ...exception_groups_bad_missing_parent.pysnap | 76 + .../exception_groups_bad_no_root.pysnap | 117 + ...xception_groups_bad_out_of_sequence.pysnap | 117 + ...tion_groups_bad_root_self_parenting.pysnap | 117 + ...tion_groups_bad_solo_self_parenting.pysnap | 76 + .../exception_groups_bad_with_cycle.pysnap | 76 + .../exception_groups_one_exception.pysnap | 76 + ...groups_one_type_under_nested_groups.pysnap | 76 + ...oups_one_type_with_different_values.pysnap | 150 + ...groups_one_type_with_similar_values.pysnap | 76 + ...pe_with_similar_values_and_children.pysnap | 117 + ...n_groups_two_exceptions_with_frames.pysnap | 528 ++ .../exception_groups_two_types.pysnap | 150 + ...roups_two_types_under_nested_groups.pysnap | 150 + .../exception_javascript_no_in_app.pysnap | 319 + .../exception_without_type.pysnap | 74 + .../exception_without_value.pysnap | 74 + .../expectct.pysnap | 69 + .../fallback_prefix_level_1.pysnap | 515 ++ ...es_ignores_ENHANCED_clojure_classes.pysnap | 161 + .../frame_empty_list.pysnap | 101 + ...gnores_ENHANCED_enhancer_by_classes.pysnap | 161 + ...ores_ENHANCED_fast_class_by_classes.pysnap | 161 + ...ame_ignores_ENHANCED_spring_classes.pysnap | 161 + .../frame_ignores_dartlang_sdk.pysnap | 169 + ...ores_extra_ENHANCED_clojure_classes.pysnap | 161 + ..._extra_ENHANCED_enhancer_by_classes.pysnap | 161 + ...nores_extra_ENHANCED_spring_classes.pysnap | 161 + ...lename_from_url_origin_corner_cases.pysnap | 343 + ...gnores_filename_if_abs_path_is_http.pysnap | 161 + .../frame_ignores_filename_if_blob.pysnap | 165 + .../frame_ignores_filename_if_http.pysnap | 179 + .../frame_ignores_filename_if_https.pysnap | 179 + .../frame_ignores_flutter_sdk.pysnap | 165 + .../frame_ignores_hibernate_classes.pysnap | 161 + ...frame_ignores_java8_lambda_function.pysnap | 161 + .../frame_ignores_java8_lambda_module.pysnap | 161 + .../frame_ignores_javassist.pysnap | 161 + .../frame_ignores_javassist_2.pysnap | 161 + .../frame_ignores_javassist_3.pysnap | 161 + .../frame_ignores_module_if_page_url.pysnap | 169 + .../frame_ignores_module_if_page_url_2.pysnap | 165 + .../frame_ignores_safari_native_code.pysnap | 161 + .../frame_ignores_sentry_dart_packages.pysnap | 565 ++ .../frame_ignores_sentry_dart_sdk.pysnap | 169 + .../frame_ignores_sentry_flutter_sdk.pysnap | 169 + ...res_sun_java_generated_constructors.pysnap | 161 + ...s_sun_java_generated_constructors_2.pysnap | 161 + ..._ignores_sun_java_generated_methods.pysnap | 227 + .../frame_sanitizes_block_functions.pysnap | 161 + .../frame_sanitizes_erb_templates.pysnap | 161 + ...frame_sanitizes_versioned_filenames.pysnap | 157 + ...ame_sanitizes_versioned_filenames_2.pysnap | 157 + ...ame_uses_context_line_over_function.pysnap | 179 + .../frame_uses_module_over_filename.pysnap | 161 + .../frame_with_only_required_vars.pysnap | 157 + .../go_pkg_mod.pysnap | 287 + .../group_125_event_126.pysnap | 2531 ++++++ .../group_200_event_200.pysnap | 1635 ++++ .../group_275_event_275.pysnap | 1891 ++++ .../group_289_event_312.pysnap | 1651 ++++ .../group_294_event_294.pysnap | 2589 ++++++ .../group_294_event_329.pysnap | 2675 ++++++ .../group_307_event_307.pysnap | 1139 +++ .../group_307_event_657.pysnap | 1185 +++ .../group_313_event_313.pysnap | 3805 ++++++++ .../group_313_event_333.pysnap | 3647 ++++++++ .../group_319_event_321.pysnap | 3867 ++++++++ .../group_389_event_389.pysnap | 767 ++ .../group_432_event_432.pysnap | 2279 +++++ .../group_432_event_453.pysnap | 2279 +++++ .../group_445_event_445.pysnap | 2489 ++++++ .../newstyle@2025_with_threads/hpkp.pysnap | 69 + .../hybrid_fingerprint_base.pysnap | 84 + ...erprint_custom_client_hybrid_server.pysnap | 1663 ++++ ...erprint_hybrid_client_custom_server.pysnap | 1660 ++++ ...rprint_same_default_different_extra.pysnap | 84 + ...rprint_same_extra_different_default.pysnap | 84 + .../in_app_in_ui.pysnap | 2319 +++++ .../java_chained.pysnap | 3984 +++++++++ .../java_minimal.pysnap | 4042 +++++++++ ...cript_exception_fallback_to_message.pysnap | 76 + ...eption_fallback_to_message_whistles.pysnap | 76 + .../javascript_exception_no_in_app.pysnap | 939 ++ .../javascript_message.pysnap | 52 + ...javascript_message_parameterization.pysnap | 52 + .../javascript_polyfills.pysnap | 345 + .../javascript_unpkg.pysnap | 415 + .../javascript_xbrowser_chrome.pysnap | 799 ++ .../javascript_xbrowser_edge.pysnap | 807 ++ .../javascript_xbrowser_firefox.pysnap | 737 ++ .../javascript_xbrowser_http_chrome.pysnap | 835 ++ .../javascript_xbrowser_http_edge.pysnap | 843 ++ .../javascript_xbrowser_http_firefox.pysnap | 773 ++ .../javascript_xbrowser_http_safari.pysnap | 897 ++ .../javascript_xbrowser_safari.pysnap | 865 ++ ...avascript_xbrowser_sentryui_firefox.pysnap | 1731 ++++ ...javascript_xbrowser_sentryui_safari.pysnap | 1445 +++ .../newstyle@2025_with_threads/laravel.pysnap | 4343 +++++++++ .../laravel_anonymous.pysnap | 395 + .../logentry_prefers_message.pysnap | 52 + .../logentry_uses_formatted.pysnap | 52 + .../macos_amd_driver.pysnap | 3177 +++++++ .../macos_intel_driver.pysnap | 3905 ++++++++ .../malloc_sentinel.pysnap | 1659 ++++ .../message_prefers_message.pysnap | 52 + .../message_uses_formatted.pysnap | 52 + .../message_with_key_pair_values.pysnap | 52 + .../minified_javascript.pysnap | 2079 +++++ .../native_complex_function_names.pysnap | 333 + .../native_driver_crash1.pysnap | 577 ++ .../native_driver_crash2.pysnap | 511 ++ .../native_driver_crash3.pysnap | 635 ++ .../native_limit_frames.pysnap | 333 + .../native_malloc_chain.pysnap | 519 ++ .../native_no_filenames.pysnap | 1015 +++ .../native_unlimited_frames.pysnap | 333 + .../native_windows_anon_namespace.pysnap | 477 + .../native_with_function_name.pysnap | 418 + .../node_exception_weird.pysnap | 991 +++ .../node_low_level_async.pysnap | 283 + .../python_exception_base.pysnap | 355 + ...n_grouping_enhancer_away_from_crash.pysnap | 1027 +++ ...hon_grouping_enhancer_towards_crash.pysnap | 1027 +++ .../python_http_error.pysnap | 456 + .../react_concurrent_rendering.pysnap | 117 + ...react_concurrent_rendering_no_cause.pysnap | 76 + ...t_concurrent_rendering_no_mechanism.pysnap | 117 + .../react_native.pysnap | 2057 +++++ .../stacktrace_cocoa.pysnap | 219 + .../stacktrace_collapse_recursion.pysnap | 585 ++ .../stacktrace_compute_hashes.pysnap | 219 + ...ce_discards_seemingly_useless_stack.pysnap | 165 + ...tacktrace_does_not_discard_non_urls.pysnap | 157 + ..._does_not_group_different_js_errors.pysnap | 165 + .../stacktrace_enforce_min_frames.pysnap | 581 ++ ...acktrace_excludes_single_frame_urls.pysnap | 161 + ...acktrace_hash_without_system_frames.pysnap | 219 + ...ce_ignores_singular_anonymous_frame.pysnap | 289 + .../stacktrace_negated_match.pysnap | 581 ++ .../stacktrace_rust.pysnap | 581 ++ .../stacktrace_rust2.pysnap | 581 ++ .../stacktrace_with_minimal_app_frames.pysnap | 839 ++ .../template_compute_hashes.pysnap | 69 + .../threads_compute_hashes.pysnap | 177 + .../threads_no_hash.pysnap | 58 + .../newstyle@2025_with_threads/unity.pysnap | 675 ++ .../unreal_assert_mac.pysnap | 2131 +++++ ...unreal_assertion_check_fail_android.pysnap | 1627 ++++ ...eal_assertion_check_fail_on_windows.pysnap | 2833 ++++++ .../unreal_ensure_check_fail_on_mac.pysnap | 5711 ++++++++++++ ...unreal_ensure_check_fail_on_windows.pysnap | 3283 +++++++ .../unreal_event_capture_mac.pysnap | 2698 ++++++ .../newstyle@2025_with_threads/actix.pysnap | 792 ++ .../android_anr.pysnap | 1574 ++++ .../aspnetcore.pysnap | 353 + .../block_invoke.pysnap | 49 + .../newstyle@2025_with_threads/bugly.pysnap | 58 + ...uilt_in_fingerprint_chunkload_error.pysnap | 49 + ..._chunkload_error_hybrid_fingerprint.pysnap | 49 + .../callee_guaranteed.pysnap | 258 + .../checksum_no_regex_match.pysnap | 9 + .../checksum_regex_match.pysnap | 8 + .../cocoa_dispatch_client_callout.pysnap | 121 + .../connection_error.pysnap | 237 + .../contributing_system_and_app_frames.pysnap | 86 + .../contributing_system_frames.pysnap | 72 + .../newstyle@2025_with_threads/csp.pysnap | 19 + .../csp_img_src.pysnap | 17 + .../csp_no_blocked_uri.pysnap | 17 + .../csp_script_data_uri.pysnap | 17 + .../csp_script_src_unsafe_eval.pysnap | 20 + .../csp_script_src_unsafe_inline.pysnap | 20 + .../csp_script_src_uri.pysnap | 17 + .../csp_style_src_elem.pysnap | 19 + .../custom_fingerprint_client.pysnap | 341 + ..._fingerprint_client_and_server_rule.pysnap | 341 + .../custom_fingerprint_server_rule.pysnap | 341 + .../newstyle@2025_with_threads/empty.pysnap | 7 + .../exception_cocoa_nserror.pysnap | 170 + .../exception_compute_hashes.pysnap | 16 + .../exception_compute_hashes_2.pysnap | 36 + .../exception_compute_hashes_3.pysnap | 56 + .../exception_groups_bad_duplicate_id.pysnap | 27 + ...ion_groups_bad_inner_self_parenting.pysnap | 22 + ...d_inner_self_parenting_duplicate_id.pysnap | 22 + ...exception_groups_bad_missing_parent.pysnap | 16 + .../exception_groups_bad_no_root.pysnap | 22 + ...xception_groups_bad_out_of_sequence.pysnap | 22 + ...tion_groups_bad_root_self_parenting.pysnap | 22 + ...tion_groups_bad_solo_self_parenting.pysnap | 16 + .../exception_groups_bad_with_cycle.pysnap | 16 + .../exception_groups_one_exception.pysnap | 16 + ...groups_one_type_under_nested_groups.pysnap | 16 + ...oups_one_type_with_different_values.pysnap | 27 + ...groups_one_type_with_similar_values.pysnap | 16 + ...pe_with_similar_values_and_children.pysnap | 22 + ...n_groups_two_exceptions_with_frames.pysnap | 89 + .../exception_groups_two_types.pysnap | 27 + ...roups_two_types_under_nested_groups.pysnap | 27 + .../exception_javascript_no_in_app.pysnap | 62 + .../exception_without_type.pysnap | 14 + .../exception_without_value.pysnap | 14 + .../expectct.pysnap | 16 + .../fallback_prefix_level_1.pysnap | 62 + ...es_ignores_ENHANCED_clojure_classes.pysnap | 30 + .../frame_empty_list.pysnap | 23 + ...gnores_ENHANCED_enhancer_by_classes.pysnap | 30 + ...ores_ENHANCED_fast_class_by_classes.pysnap | 30 + ...ame_ignores_ENHANCED_spring_classes.pysnap | 30 + .../frame_ignores_dartlang_sdk.pysnap | 33 + ...ores_extra_ENHANCED_clojure_classes.pysnap | 30 + ..._extra_ENHANCED_enhancer_by_classes.pysnap | 30 + ...nores_extra_ENHANCED_spring_classes.pysnap | 30 + ...lename_from_url_origin_corner_cases.pysnap | 58 + ...gnores_filename_if_abs_path_is_http.pysnap | 30 + .../frame_ignores_filename_if_blob.pysnap | 29 + .../frame_ignores_filename_if_http.pysnap | 34 + .../frame_ignores_filename_if_https.pysnap | 34 + .../frame_ignores_flutter_sdk.pysnap | 34 + .../frame_ignores_hibernate_classes.pysnap | 30 + ...frame_ignores_java8_lambda_function.pysnap | 30 + .../frame_ignores_java8_lambda_module.pysnap | 30 + .../frame_ignores_javassist.pysnap | 30 + .../frame_ignores_javassist_2.pysnap | 30 + .../frame_ignores_javassist_3.pysnap | 30 + .../frame_ignores_module_if_page_url.pysnap | 33 + .../frame_ignores_module_if_page_url_2.pysnap | 34 + .../frame_ignores_safari_native_code.pysnap | 30 + .../frame_ignores_sentry_dart_packages.pysnap | 93 + .../frame_ignores_sentry_dart_sdk.pysnap | 33 + .../frame_ignores_sentry_flutter_sdk.pysnap | 33 + ...res_sun_java_generated_constructors.pysnap | 30 + ...s_sun_java_generated_constructors_2.pysnap | 30 + ..._ignores_sun_java_generated_methods.pysnap | 40 + .../frame_sanitizes_block_functions.pysnap | 30 + .../frame_sanitizes_erb_templates.pysnap | 30 + ...frame_sanitizes_versioned_filenames.pysnap | 26 + ...ame_sanitizes_versioned_filenames_2.pysnap | 26 + ...ame_uses_context_line_over_function.pysnap | 34 + .../frame_uses_module_over_filename.pysnap | 30 + .../frame_with_only_required_vars.pysnap | 26 + .../go_pkg_mod.pysnap | 58 + .../group_125_event_126.pysnap | 286 + .../group_200_event_200.pysnap | 174 + .../group_275_event_275.pysnap | 206 + .../group_289_event_312.pysnap | 190 + .../group_294_event_294.pysnap | 288 + .../group_294_event_329.pysnap | 318 + .../group_307_event_307.pysnap | 126 + .../group_307_event_657.pysnap | 116 + .../group_313_event_313.pysnap | 384 + .../group_313_event_333.pysnap | 394 + .../group_319_event_321.pysnap | 390 + .../group_389_event_389.pysnap | 90 + .../group_432_event_432.pysnap | 258 + .../group_432_event_453.pysnap | 258 + .../group_445_event_445.pysnap | 300 + .../newstyle@2025_with_threads/hpkp.pysnap | 16 + .../hybrid_fingerprint_base.pysnap | 18 + ...erprint_custom_client_hybrid_server.pysnap | 340 + ...erprint_hybrid_client_custom_server.pysnap | 341 + ...rprint_same_default_different_extra.pysnap | 18 + ...rprint_same_extra_different_default.pysnap | 18 + .../in_app_in_ui.pysnap | 298 + .../java_chained.pysnap | 793 ++ .../java_minimal.pysnap | 809 ++ ...cript_exception_fallback_to_message.pysnap | 16 + ...eption_fallback_to_message_whistles.pysnap | 16 + .../javascript_exception_no_in_app.pysnap | 150 + .../javascript_message.pysnap | 13 + ...javascript_message_parameterization.pysnap | 13 + .../javascript_polyfills.pysnap | 60 + .../javascript_unpkg.pysnap | 74 + .../javascript_xbrowser_chrome.pysnap | 122 + .../javascript_xbrowser_edge.pysnap | 130 + .../javascript_xbrowser_firefox.pysnap | 116 + .../javascript_xbrowser_http_chrome.pysnap | 158 + .../javascript_xbrowser_http_edge.pysnap | 166 + .../javascript_xbrowser_http_firefox.pysnap | 152 + .../javascript_xbrowser_http_safari.pysnap | 164 + .../javascript_xbrowser_safari.pysnap | 132 + ...avascript_xbrowser_sentryui_firefox.pysnap | 354 + ...javascript_xbrowser_sentryui_safari.pysnap | 292 + .../newstyle@2025_with_threads/laravel.pysnap | 726 ++ .../laravel_anonymous.pysnap | 68 + .../logentry_prefers_message.pysnap | 13 + .../logentry_uses_formatted.pysnap | 13 + .../macos_amd_driver.pysnap | 316 + .../macos_intel_driver.pysnap | 372 + .../malloc_sentinel.pysnap | 198 + .../message_prefers_message.pysnap | 13 + .../message_uses_formatted.pysnap | 13 + .../message_with_key_pair_values.pysnap | 13 + .../minified_javascript.pysnap | 422 + .../native_complex_function_names.pysnap | 48 + .../native_driver_crash1.pysnap | 68 + .../native_driver_crash2.pysnap | 58 + .../native_driver_crash3.pysnap | 70 + .../native_limit_frames.pysnap | 48 + .../native_malloc_chain.pysnap | 66 + .../native_no_filenames.pysnap | 114 + .../native_unlimited_frames.pysnap | 48 + .../native_windows_anon_namespace.pysnap | 80 + .../native_with_function_name.pysnap | 71 + .../node_exception_weird.pysnap | 202 + .../node_low_level_async.pysnap | 54 + .../python_exception_base.pysnap | 56 + ...n_grouping_enhancer_away_from_crash.pysnap | 210 + ...hon_grouping_enhancer_towards_crash.pysnap | 210 + .../python_http_error.pysnap | 93 + .../react_concurrent_rendering.pysnap | 22 + ...react_concurrent_rendering_no_cause.pysnap | 16 + ...t_concurrent_rendering_no_mechanism.pysnap | 22 + .../react_native.pysnap | 414 + .../stacktrace_cocoa.pysnap | 32 + .../stacktrace_collapse_recursion.pysnap | 118 + .../stacktrace_compute_hashes.pysnap | 32 + ...ce_discards_seemingly_useless_stack.pysnap | 29 + ...tacktrace_does_not_discard_non_urls.pysnap | 26 + ..._does_not_group_different_js_errors.pysnap | 29 + .../stacktrace_enforce_min_frames.pysnap | 72 + ...acktrace_excludes_single_frame_urls.pysnap | 30 + ...acktrace_hash_without_system_frames.pysnap | 32 + ...ce_ignores_singular_anonymous_frame.pysnap | 46 + .../stacktrace_negated_match.pysnap | 72 + .../stacktrace_rust.pysnap | 72 + .../stacktrace_rust2.pysnap | 72 + .../stacktrace_with_minimal_app_frames.pysnap | 92 + .../template_compute_hashes.pysnap | 16 + .../threads_compute_hashes.pysnap | 32 + .../threads_no_hash.pysnap | 15 + .../newstyle@2025_with_threads/unity.pysnap | 110 + .../unreal_assert_mac.pysnap | 222 + ...unreal_assertion_check_fail_android.pysnap | 166 + ...eal_assertion_check_fail_on_windows.pysnap | 308 + .../unreal_ensure_check_fail_on_mac.pysnap | 526 ++ ...unreal_ensure_check_fail_on_windows.pysnap | 366 + .../unreal_event_capture_mac.pysnap | 277 + tests/sentry/grouping/test_strategies.py | 20 +- 560 files changed, 186410 insertions(+), 5 deletions(-) create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/actix.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/android_anr.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/aspnetcore.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/block_invoke.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/bugly.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/connection_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_img_src.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/empty.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_type.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_value.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/expectct.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_empty_list.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_125_event_126.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_200_event_200.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_275_event_275.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_289_event_312.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_294.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_329.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_307.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_657.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_313.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_333.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_319_event_321.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_389_event_389.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_432.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_453.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_445_event_445.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hpkp.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_chained.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_minimal.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/minified_javascript.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_complex_function_names.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash1.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_limit_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_no_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_with_function_name.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_exception_weird.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_low_level_async.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_exception_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_http_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_native.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_cocoa.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_collapse_recursion.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_discards_seemingly_useless_stack.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_does_not_discard_non_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_does_not_group_different_js_errors.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_enforce_min_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_excludes_single_frame_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_no_hash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unity.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unknown_variant.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/actix.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/android_anr.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/aspnetcore.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/block_invoke.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/bugly.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/callee_guaranteed.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_no_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/connection_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_img_src.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_data_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_style_src_elem.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/empty.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_exception.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_type.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_value.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/expectct.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_empty_list.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/go_pkg_mod.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_125_event_126.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_200_event_200.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_275_event_275.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_289_event_312.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_294.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_329.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_307.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_657.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_313.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_333.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_319_event_321.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_389_event_389.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_432.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_453.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_445_event_445.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hpkp.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/in_app_in_ui.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_chained.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_minimal.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message_parameterization.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_polyfills.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_unpkg.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel_anonymous.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_amd_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_intel_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/malloc_sentinel.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_with_key_pair_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/minified_javascript.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_complex_function_names.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash1.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash3.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_limit_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_malloc_chain.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_no_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_unlimited_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_with_function_name.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_exception_weird.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_low_level_async.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_exception_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_http_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_native.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_cocoa.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_collapse_recursion.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_discards_seemingly_useless_stack.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_does_not_discard_non_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_does_not_group_different_js_errors.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_enforce_min_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_excludes_single_frame_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_negated_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust2.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/template_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_no_hash.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unity.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assert_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/actix.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/android_anr.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/aspnetcore.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/block_invoke.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/bugly.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/connection_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_img_src.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/empty.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_type.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_value.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/expectct.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_empty_list.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_125_event_126.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_200_event_200.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_275_event_275.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_289_event_312.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_294.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_329.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_307.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_657.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_313.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_333.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_319_event_321.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_389_event_389.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_432.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_453.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_445_event_445.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hpkp.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_chained.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_minimal.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_prefers_message.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/minified_javascript.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_complex_function_names.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash1.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_limit_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_no_filenames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_with_function_name.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_exception_weird.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_low_level_async.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_exception_base.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_http_error.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_native.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_cocoa.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_collapse_recursion.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_discards_seemingly_useless_stack.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_does_not_discard_non_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_does_not_group_different_js_errors.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_enforce_min_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_excludes_single_frame_urls.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_no_hash.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unity.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap create mode 100644 tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/actix.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/actix.pysnap new file mode 100644 index 00000000000000..9a5310f05c6eff --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/actix.pysnap @@ -0,0 +1,601 @@ +--- +created: '2025-11-04T12:54:19.756206+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "738e7d2503464bc264b4f791286f5122" + contributing component: exception + hint: None + root_component: + app* + exception* + 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" + type* + "actix_web::pipeline" + system* + hash: "19a96e0438d28e48355653def82f887a" + contributing component: exception + hint: None + root_component: + system* + exception* + 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}}" + type* + "actix_web::pipeline" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/android_anr.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/android_anr.pysnap new file mode 100644 index 00000000000000..a7e6a601632849 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/android_anr.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:19.779116+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "521a2e193e67a25df1006cb02ee24bd6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + module* + "androidx.recyclerview.widget.RecyclerView" + function* + "onLayout" + type* + "ApplicationNotResponding" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/aspnetcore.pysnap new file mode 100644 index 00000000000000..96073f2aae02db --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/aspnetcore.pysnap @@ -0,0 +1,210 @@ +--- +created: '2025-11-04T12:54:19.797171+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "228c649a3aa0901622c0a0e66ab0522c" + contributing component: exception + hint: None + root_component: + app* + 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" + type* + "System.Exception" + system* + hash: "4ccd0f1953483581ba360c7518f90332" + contributing component: exception + hint: None + root_component: + 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" + type* + "System.Exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/block_invoke.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/block_invoke.pysnap new file mode 100644 index 00000000000000..5f77409f01d260 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/block_invoke.pysnap @@ -0,0 +1,39 @@ +--- +created: '2025-11-04T12:54:19.811959+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "ff6c4ee7c54f118a9647ee86f0c2b0b0" + 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 in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "__99+[Something else]_block_invoke_2" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/bugly.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/bugly.pysnap new file mode 100644 index 00000000000000..207b61952fc26d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/bugly.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:19.826770+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 00000000000000..eb0e75deb79773 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,28 @@ +--- +created: '2025-11-04T12:54:19.857525+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "5d731dcf8ecc4f042eeacf528d8d8da9" + 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@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 00000000000000..e541a2ef079980 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,29 @@ +--- +created: '2025-11-04T12:54:19.842199+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "5d731dcf8ecc4f042eeacf528d8d8da9" + 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@2025_with_threads/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap new file mode 100644 index 00000000000000..900945cee38a3e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap @@ -0,0 +1,79 @@ +--- +created: '2025-11-04T12:54:19.874907+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4ef1fb44d656c3be2a146971f2a222dc" + contributing component: exception + hint: None + root_component: + app* + exception* + 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" + type* + "" + ns_error* + domain* + "" + code* + 2 + system* + hash: "47481871aa8d5ab5729cf2db78ce3032" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "" + ns_error* + domain* + "" + code* + 2 diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap new file mode 100644 index 00000000000000..6fa08646e1bb39 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:19.888601+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap new file mode 100644 index 00000000000000..3517d463518e1f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap @@ -0,0 +1,21 @@ +--- +created: '2025-11-04T12:54:19.902780+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 00000000000000..657f3d92fa2883 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,68 @@ +--- +created: '2025-11-04T12:54:19.916897+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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 stack trace 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 stack trace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "FudgeLogTaggedError" + frame* (marked in-app by stack trace 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@2025_with_threads/connection_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/connection_error.pysnap new file mode 100644 index 00000000000000..1a985d54c907cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/connection_error.pysnap @@ -0,0 +1,157 @@ +--- +created: '2025-11-04T12:54:19.935167+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "6b059b9febc815ac18ac4d2082e38a9b" + contributing component: exception + hint: None + root_component: + app* + exception* + 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)" + type* + "ConnectionError" + system* + hash: "013d3477a774fe20c468dc8accd516f1" + contributing component: exception + hint: None + root_component: + system* + exception* + 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,))" + type* + "ConnectionError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap new file mode 100644 index 00000000000000..4ad97158053b2d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap @@ -0,0 +1,66 @@ +--- +created: '2025-11-04T12:54:19.952577+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "161ce02ecc5d6685a72e8e520ab726b3" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (function:playFetch +app)) + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" + type* + "FailedToFetchError" + system* + hash: "c5e4b4a9ad1803c4d4ca7feee5e430ae" + contributing component: exception + hint: None + root_component: + system* + exception* + 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!');" + type* + "FailedToFetchError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap new file mode 100644 index 00000000000000..dc4bc6d28bdae8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:19.967660+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "fe92cff6711f8a0a30cabb8b9245b1d6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + type* + "FailedToFetchError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp.pysnap new file mode 100644 index 00000000000000..60337922a7e319 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.075782+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_img_src.pysnap new file mode 100644 index 00000000000000..498871745a9855 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_img_src.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:19.982261+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap new file mode 100644 index 00000000000000..31f97cca5af3b8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:19.995384+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap new file mode 100644 index 00000000000000..6891fc518355ba --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.008747+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 00000000000000..cbad7e9df24787 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.021801+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 00000000000000..05e426bddf82b9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.035736+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap new file mode 100644 index 00000000000000..c3004165fee688 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.048768+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap new file mode 100644 index 00000000000000..978123f1701408 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.062338+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap new file mode 100644 index 00000000000000..12b0ff04adeb74 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap @@ -0,0 +1,28 @@ +--- +created: '2025-11-04T12:54:20.106853+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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_fingerprint* + hash: "f30afa00b85f5cac5ee0bce01b31f08d" + 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@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 00000000000000..3fbba06edf6348 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,29 @@ +--- +created: '2025-11-04T12:54:20.091498+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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_fingerprint* + hash: "554e214208f0372603dc9fa6c1c0965f" + 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@2025_with_threads/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap new file mode 100644 index 00000000000000..ef75e48f25dfcc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,28 @@ +--- +created: '2025-11-04T12:54:20.122510+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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_fingerprint* + hash: "554e214208f0372603dc9fa6c1c0965f" + 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@2025_with_threads/empty.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/empty.pysnap new file mode 100644 index 00000000000000..b97d0a37dc5006 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/empty.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.135972+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap new file mode 100644 index 00000000000000..7936cf7b07e6a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.152529+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap new file mode 100644 index 00000000000000..e561d45652d4c3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.195419+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap new file mode 100644 index 00000000000000..4029d2ad028380 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap @@ -0,0 +1,38 @@ +--- +created: '2025-11-04T12:54:20.166830+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "9509e122c6175606d52862fa4f64853c" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap new file mode 100644 index 00000000000000..5abb661a702cc8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap @@ -0,0 +1,46 @@ +--- +created: '2025-11-04T12:54:20.181763+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "669cb6664e0f5fed38665da04e464f7e" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 00000000000000..1a4c8092a2b8a2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,45 @@ +--- +created: '2025-11-04T12:54:20.210215+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 00000000000000..0d8bc8861660da --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.238563+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 00000000000000..3475703ecce8b1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.224172+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 00000000000000..c50ef66b80a69c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.253216+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap new file mode 100644 index 00000000000000..17a8901acf728c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.267937+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 00000000000000..72b82ca12ac070 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.281641+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 00000000000000..2eeaaa7f4a016f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.295884+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 00000000000000..594ae4d36da2ee --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.310328+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 00000000000000..aabcb602df7bb9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.324214+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap new file mode 100644 index 00000000000000..6402731976fde5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.339066+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 00000000000000..cd7defc408bd6b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.352563+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 00000000000000..8083bd1165234d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,45 @@ +--- +created: '2025-11-04T12:54:20.366579+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 00000000000000..f12b6488ae3371 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:20.395376+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 00000000000000..af596856cb5759 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:20.381582+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 00000000000000..2dcaf667464af2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,90 @@ +--- +created: '2025-11-04T12:54:20.410014+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "d505dfb9059ac63c11955233323a9100" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + 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" + type* + "DoStuffException" + exception* + stacktrace* + frame* (marked in-app by the client) + module* + "dostuff" + function* + "do_other_stuff" + type* + "DoOtherStuffException" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." + system* + hash: "4f9cc6a81f4eb34f9e917374f281b9dc" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + stacktrace* + frame* + module* + "dostuff" + function* + "do_stuff" + frame* + module* + "dostuff" + function* + "do_different_stuff" + type* + "DoStuffException" + exception* + stacktrace* + frame* + module* + "dostuff" + function* + "do_other_stuff" + type* + "DoOtherStuffException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap new file mode 100644 index 00000000000000..0d0e43e5630c00 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap @@ -0,0 +1,45 @@ +--- +created: '2025-11-04T12:54:20.437563+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 00000000000000..26fe6131c0e605 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,45 @@ +--- +created: '2025-11-04T12:54:20.423769+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap new file mode 100644 index 00000000000000..0cb9a4406f6193 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap @@ -0,0 +1,45 @@ +--- +created: '2025-11-04T12:54:20.452015+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "26552f86ca2368e708afa1df6effc1c5" + contributing component: exception + hint: None + root_component: + system* + exception* + 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);" + type* + "TypeError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_type.pysnap new file mode 100644 index 00000000000000..c23610b000f50f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_type.pysnap @@ -0,0 +1,32 @@ +--- +created: '2025-11-04T12:54:20.465942+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_value.pysnap new file mode 100644 index 00000000000000..03949593ba3265 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/exception_without_value.pysnap @@ -0,0 +1,32 @@ +--- +created: '2025-11-04T12:54:20.479667+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/expectct.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/expectct.pysnap new file mode 100644 index 00000000000000..26d676f373f638 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/expectct.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T12:54:20.541531+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "example.com", + "security_report_type": "expect_ct" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "expect_ct" + } +} +--- +contributing variants: + default* + hash: "3d2933f4b5ec459ec8d569a398fd328c" + contributing component: expect_ct + hint: None + root_component: + default* + expect_ct* + salt* (a static salt) + "expect-ct" + hostname* + "example.com" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap new file mode 100644 index 00000000000000..b6655edb0fd667 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap @@ -0,0 +1,41 @@ +--- +created: '2025-11-04T12:54:20.557050+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "87497299851e09febfecf4e84e0d45ba" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "-[UIApplication _run]" + frame* + function* + "objc_release" + type* + "EXC_BAD_ACCESS" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..4b1a7176ca8521 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.571104+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_empty_list.pysnap new file mode 100644 index 00000000000000..784d3ef87f32d4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_empty_list.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.585188+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..8a50268d5a6a44 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.598923+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 00000000000000..8cef963f2f4558 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.612814+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..012b962f56058a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.627942+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 00000000000000..e30f5108cf6df8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.642672+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..237eb000c0cfa5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.656679+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..bbb1755badf759 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.670624+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..8865569bcdd703 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.684225+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 00000000000000..7b7a77c3a64f46 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,44 @@ +--- +created: '2025-11-04T12:54:20.698066+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 00000000000000..cebbdbec0bee2d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.712094+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 00000000000000..783f5cfddb255c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.725728+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap new file mode 100644 index 00000000000000..cc19b96a6eef9c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.738699+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap new file mode 100644 index 00000000000000..dedb11f70b687e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.752534+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 00000000000000..13cfe47c7382e9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.765687+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 00000000000000..5af92e46267e8e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.779193+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 00000000000000..79ea7aed72d58c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.793386+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 00000000000000..dfe8e9b10df75f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.808619+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap new file mode 100644 index 00000000000000..09e5d536b11768 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.850683+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap new file mode 100644 index 00000000000000..1e18f7c32c3d84 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.822892+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap new file mode 100644 index 00000000000000..5a1f48965a763e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.836263+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_module_if_page_url.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap new file mode 100644 index 00000000000000..3d2071314b7654 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.878557+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap new file mode 100644 index 00000000000000..edb637cbad9ea2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.864332+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "0cc175b9c0f1b6a831c399e269772661" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + function* + "a" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap new file mode 100644 index 00000000000000..7982650c7217a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:20.892641+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 00000000000000..23a5221857bde9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.906175+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 00000000000000..60d6224d2e1e06 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.919188+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 00000000000000..2d447db159a9db --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:20.933108+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 00000000000000..abb25491fd4d6a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.963219+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 00000000000000..f2ff1179791011 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.946464+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 00000000000000..6e5e4686a41db0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:20.978824+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap new file mode 100644 index 00000000000000..501963d40b2695 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:20.994538+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 00000000000000..4070c28353325f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:21.009914+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 00000000000000..0c25d7d52dac3a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:21.041653+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 00000000000000..cde47a992db7f5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:21.025529+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap new file mode 100644 index 00000000000000..c331d9d9d6cc19 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,37 @@ +--- +created: '2025-11-04T12:54:21.057072+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap new file mode 100644 index 00000000000000..67c6d5981abe97 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:21.072683+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap new file mode 100644 index 00000000000000..713081ecb58017 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap @@ -0,0 +1,35 @@ +--- +created: '2025-11-04T12:54:21.088433+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap new file mode 100644 index 00000000000000..9f881e079606ad --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap @@ -0,0 +1,60 @@ +--- +created: '2025-11-04T12:54:21.105288+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4b8bbc500bd2cabfcadc1f1be867e0bb" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + module* + "main" + function* + "background.func2" + type* + "*pq.Error" + system* + hash: "348fc4026c9fa11ffba8fbfa80a134c9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + module* + "github.com/robfig/cron/v3" + function* + "FuncJob.Run" + frame* + module* + "main" + function* + "background.func2" + type* + "*pq.Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_125_event_126.pysnap new file mode 100644 index 00000000000000..34bea722083fa6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_125_event_126.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:21.126498+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_200_event_200.pysnap new file mode 100644 index 00000000000000..4a26aa73cb3f30 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_200_event_200.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:21.145800+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_275_event_275.pysnap new file mode 100644 index 00000000000000..c38e5872125dd5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_275_event_275.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:21.166246+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_289_event_312.pysnap new file mode 100644 index 00000000000000..edaffdc9ada1d4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_289_event_312.pysnap @@ -0,0 +1,51 @@ +--- +created: '2025-11-04T12:54:21.186752+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "9c336f632f6764c0f082a6a66edbf22d" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_294.pysnap new file mode 100644 index 00000000000000..1b8a4624cc96b2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_294.pysnap @@ -0,0 +1,53 @@ +--- +created: '2025-11-04T12:54:21.209168+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "49b6f72b6635cb43190c57ee56b026b0" + 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" + frame* + function* + "std::terminate" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_329.pysnap new file mode 100644 index 00000000000000..2a6d98b01bf58c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_294_event_329.pysnap @@ -0,0 +1,53 @@ +--- +created: '2025-11-04T12:54:21.229766+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "49b6f72b6635cb43190c57ee56b026b0" + 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" + frame* + function* + "std::terminate" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_307.pysnap new file mode 100644 index 00000000000000..05b9d95437ba06 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_307.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T12:54:21.247729+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_657.pysnap new file mode 100644 index 00000000000000..7f57815c0688db --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_307_event_657.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T12:54:21.263917+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_313.pysnap new file mode 100644 index 00000000000000..7fb1be3e478e61 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_313.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:21.284217+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "8be5979a334287a1b47457228f1d4612" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_333.pysnap new file mode 100644 index 00000000000000..8edee14e9298e5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_313_event_333.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:21.303033+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "8be5979a334287a1b47457228f1d4612" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_319_event_321.pysnap new file mode 100644 index 00000000000000..bb4c3e2cd5759b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_319_event_321.pysnap @@ -0,0 +1,57 @@ +--- +created: '2025-11-04T12:54:21.323413+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "7e64037e487c78ce0439f750a2ef503f" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_389_event_389.pysnap new file mode 100644 index 00000000000000..170c3c91d04463 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_389_event_389.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T12:54:21.340948+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_432.pysnap new file mode 100644 index 00000000000000..f604124f149133 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_432.pysnap @@ -0,0 +1,54 @@ +--- +created: '2025-11-04T12:54:21.361695+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "6148c73af04344a8597354711f5951ea" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_453.pysnap new file mode 100644 index 00000000000000..cd72a19d4d6f1c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_432_event_453.pysnap @@ -0,0 +1,51 @@ +--- +created: '2025-11-04T12:54:21.384452+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "1056f62d72ff8b4d0c3842d696dbb10a" + 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* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_445_event_445.pysnap new file mode 100644 index 00000000000000..0eab2f79c7e470 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/group_445_event_445.pysnap @@ -0,0 +1,62 @@ +--- +created: '2025-11-04T12:54:21.404204+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "15526a7b64e9b5dc6d89e7ebec864260" + 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" + frame* + function* + "raise" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hpkp.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hpkp.pysnap new file mode 100644 index 00000000000000..35731e04a67639 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hpkp.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T12:54:21.419627+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +hash_basis: violation +hashing_metadata: { + "blocked_host": "example.com", + "security_report_type": "hpkp" +} +--- +metrics with tags: { + "grouping.grouphashmetadata.event_hash_basis": { + "hash_basis": "violation", + "is_hybrid_fingerprint": "False" + }, + "grouping.grouphashmetadata.event_hashing_metadata.violation": { + "security_report_type": "hpkp" + } +} +--- +contributing variants: + default* + hash: "1e37a374cb33572622d02ff7a6237c44" + contributing component: hpkp + hint: None + root_component: + default* + hpkp* + salt* (a static salt) + "hpkp" + hostname* + "example.com" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap new file mode 100644 index 00000000000000..c840e21d5ec82d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:21.437935+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "e3d593b4335190212ca7c18b8e967fb1" + 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@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 00000000000000..7190c7f4ceacd7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,257 @@ +--- +created: '2025-11-04T12:54:21.457619+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "19163f3ca34f5995c69d85351ce3d697" + 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* + 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)" + type* + "SoftTimeLimitExceeded" + values: ["{{ default }}","soft-timelimit-exceeded"] + system* + hash: "847950eb44d280e6758d136c763d6ddc" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + values: ["{{ default }}","soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 00000000000000..ab8613d0a7fa73 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,29 @@ +--- +created: '2025-11-04T12:54:21.478832+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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_fingerprint* + hash: "554e214208f0372603dc9fa6c1c0965f" + 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@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 00000000000000..baf2da3a2c924d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:21.496577+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "5b5ad5a0fbb4deb5e3fc631ce42681ae" + 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@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 00000000000000..939cfed4b7163c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:21.512914+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c5578778212497f1ff3435405e2a4a98" + 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@2025_with_threads/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap new file mode 100644 index 00000000000000..f5da38a52885ff --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap @@ -0,0 +1,167 @@ +--- +created: '2025-11-04T12:54:21.533109+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/java_chained.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_chained.pysnap new file mode 100644 index 00000000000000..004ac8867ef602 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_chained.pysnap @@ -0,0 +1,289 @@ +--- +created: '2025-11-04T12:54:21.551317+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "1959b227a7cf6acf7f3fd401b5d9f09b" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + 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" + type* + "BindException" + exception* + 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" + type* + "LifecycleException" + exception* + 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" + type* + "LifecycleException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_minimal.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_minimal.pysnap new file mode 100644 index 00000000000000..77b485d8b9fb25 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/java_minimal.pysnap @@ -0,0 +1,280 @@ +--- +created: '2025-11-04T12:54:21.569720+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "ef2555bf7958ada8eefafbfdaed1c409" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "ArithmeticException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 00000000000000..64cfca66fa7e38 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:21.598954+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 00000000000000..f349a67d63793e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:21.584762+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap new file mode 100644 index 00000000000000..d4a5323e4e0ada --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap @@ -0,0 +1,95 @@ +--- +created: '2025-11-04T12:54:21.614199+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c0f3f7d6deb17aec9d07259ac684fad0" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "ReferenceError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message.pysnap new file mode 100644 index 00000000000000..800f35324304ff --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.642486+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap new file mode 100644 index 00000000000000..34404438fee171 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.628439+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap new file mode 100644 index 00000000000000..887735d2ad6ed3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:21.657583+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap new file mode 100644 index 00000000000000..19ed01891b3801 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap @@ -0,0 +1,49 @@ +--- +created: '2025-11-04T12:54:21.672323+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "6ab78545e13144405fb21dadb9045b91" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap new file mode 100644 index 00000000000000..6ddfece837e17a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.687680+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap new file mode 100644 index 00000000000000..bd39cd85e034e4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.704420+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap new file mode 100644 index 00000000000000..23aae1b63d3229 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.720971+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 00000000000000..8bc41bad7023b4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.736576+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 00000000000000..3b9b6b6a0ce49e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.751720+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 00000000000000..3ae4c81edc6b32 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.767621+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 00000000000000..d85529e2cf5b8a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.783016+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap new file mode 100644 index 00000000000000..dceb25bc3cb9af --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T12:54:21.798526+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 00000000000000..f8d08ac25f28eb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,155 @@ +--- +created: '2025-11-04T12:54:21.816476+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4a3cf3893b6485428dd02da116c8370e" + contributing component: exception + hint: None + root_component: + app* + exception* + 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();" + type* + "NotFoundError" + system* + hash: "d5456487ea8dccfe96c1968b19870978" + contributing component: exception + hint: None + root_component: + system* + exception* + 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();" + type* + "NotFoundError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 00000000000000..236d064ad7bf76 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,135 @@ +--- +created: '2025-11-04T12:54:21.833091+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4a3cf3893b6485428dd02da116c8370e" + contributing component: exception + hint: None + root_component: + app* + exception* + 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();" + type* + "NotFoundError" + system* + hash: "0b81da6ea3d7cc82b1d4825b7aac0b8d" + contributing component: exception + hint: None + root_component: + system* + exception* + 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();" + type* + "NotFoundError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel.pysnap new file mode 100644 index 00000000000000..b135eb634d8a7e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel.pysnap @@ -0,0 +1,412 @@ +--- +created: '2025-11-04T12:54:21.865892+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4665d486184740231357ab63f4543a8d" + contributing component: exception + hint: None + root_component: + app* + 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');" + type* + "Exception" + system* + hash: "107ed03036d901157372f260bc3df446" + contributing component: exception + hint: None + root_component: + system* + 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');" + type* + "Exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap new file mode 100644 index 00000000000000..c64d5fb5cb2eea --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap @@ -0,0 +1,69 @@ +--- +created: '2025-11-04T12:54:21.848222+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "a728cdf5d62c8e017c35c3fe04051b6e" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "server.php" + context_line* + "require_once __DIR__.'/public/index.php';" + type* + "Exception" + system* + hash: "63c67781779781d9b0a442a5b2bdb976" + contributing component: exception + hint: None + root_component: + system* + 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)" + type* + "Exception" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap new file mode 100644 index 00000000000000..4604c62e15fcc8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.879646+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap new file mode 100644 index 00000000000000..23bba9d9768074 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.893405+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap new file mode 100644 index 00000000000000..5502c89a357340 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:21.910412+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "b8baf791d22ac902d5f59a7eedd844fd" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap new file mode 100644 index 00000000000000..75826ea6e9689a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap @@ -0,0 +1,57 @@ +--- +created: '2025-11-04T12:54:21.927904+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "36be6e0b6123ef6ecfbef62f5cb88406" + 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" + frame* + function* + "abort" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap new file mode 100644 index 00000000000000..cab447914447f1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap @@ -0,0 +1,55 @@ +--- +created: '2025-11-04T12:54:21.944157+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "70b7b816193e06eb5d6649989fbaf605" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + frame* + function* + "abort" + type* + "SIGABRT" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_prefers_message.pysnap new file mode 100644 index 00000000000000..206282fb9a17f3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_prefers_message.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.958010+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap new file mode 100644 index 00000000000000..c29931d9063ea3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.971621+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap new file mode 100644 index 00000000000000..50c139c50ceb1f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap @@ -0,0 +1,31 @@ +--- +created: '2025-11-04T12:54:21.988696+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "d2ab1028e9cb44352a824e878951f412" + 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@2025_with_threads/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/minified_javascript.pysnap new file mode 100644 index 00000000000000..334c0574459c45 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/minified_javascript.pysnap @@ -0,0 +1,127 @@ +--- +created: '2025-11-04T12:54:22.005963+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "dcfcd48a02c100bbe4023cbc783054f0" + contributing component: exception + hint: None + root_component: + system* + exception* + 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@2025_with_threads/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap new file mode 100644 index 00000000000000..413a57380e367e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T12:54:22.049994+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap new file mode 100644 index 00000000000000..497b93d0efa4d8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:22.064704+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_limit_frames.pysnap new file mode 100644 index 00000000000000..1c03de2738451b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_limit_frames.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T12:54:22.079691+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap new file mode 100644 index 00000000000000..5e2e92a99ee40a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap @@ -0,0 +1,39 @@ +--- +created: '2025-11-04T12:54:22.094176+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_no_filenames.pysnap new file mode 100644 index 00000000000000..10f38059fb30ab --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_no_filenames.pysnap @@ -0,0 +1,83 @@ +--- +created: '2025-11-04T12:54:22.109816+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap new file mode 100644 index 00000000000000..13241b75fdfc02 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap @@ -0,0 +1,39 @@ +--- +created: '2025-11-04T12:54:22.123869+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap new file mode 100644 index 00000000000000..5ae296ac6bd194 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:22.139114+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_with_function_name.pysnap new file mode 100644 index 00000000000000..9ef255677bd39b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/native_with_function_name.pysnap @@ -0,0 +1,53 @@ +--- +created: '2025-11-04T12:54:22.153949+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_exception_weird.pysnap new file mode 100644 index 00000000000000..defb8ac1fe1052 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_exception_weird.pysnap @@ -0,0 +1,141 @@ +--- +created: '2025-11-04T12:54:22.171155+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "a20509269752c9a1bea6078851e4d39c" + contributing component: exception + hint: None + root_component: + app* + exception* + 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" + type* + "Error" + system* + hash: "252dc79eb5653bf822e2684d90734cb8" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_low_level_async.pysnap new file mode 100644 index 00000000000000..eadc6cd7789fd9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/node_low_level_async.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:22.187835+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_exception_base.pysnap new file mode 100644 index 00000000000000..4588201302b94e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_exception_base.pysnap @@ -0,0 +1,65 @@ +--- +created: '2025-11-04T12:54:22.205042+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "c52ebcc2d9d0780a23c7d99831678830" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + exception* + type* + "ValueError" + value* + "hello world" + system* + hash: "669cb6664e0f5fed38665da04e464f7e" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + exception* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 00000000000000..428ae9c87d205b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,80 @@ +--- +created: '2025-11-04T12:54:22.220956+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "121caa876de75ec51bf72ed4c852cd75" + contributing component: exception + hint: None + root_component: + app* + exception* + 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']" + type* + "MultiValueDictKeyError" + system* + hash: "a5af2577d4caca8f983657c5d1919e14" + contributing component: exception + hint: None + root_component: + system* + exception* + 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))" + type* + "MultiValueDictKeyError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 00000000000000..7dd62867a8adc4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,56 @@ +--- +created: '2025-11-04T12:54:22.236472+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "90888e813b09fa25061af2883c0fb9bd" + contributing component: exception + hint: None + root_component: + system* + exception* + 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)" + type* + "MultiValueDictKeyError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_http_error.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_http_error.pysnap new file mode 100644 index 00000000000000..cdc623ceaa3cd2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/python_http_error.pysnap @@ -0,0 +1,80 @@ +--- +created: '2025-11-04T12:54:22.251141+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "d59239f5aad3304d60beb1fde3369b78" + contributing component: exception + hint: None + root_component: + app* + exception* + 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()" + type* + "HTTPError" + system* + hash: "133db3f366b1327dab4e661f66dfb961" + contributing component: exception + hint: None + root_component: + system* + exception* + 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)" + type* + "HTTPError" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap new file mode 100644 index 00000000000000..3d59720c289832 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:22.293739+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 00000000000000..fdbbb32610251c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T12:54:22.265282+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 00000000000000..61698bd7cc490d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T12:54:22.279157+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/react_native.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_native.pysnap new file mode 100644 index 00000000000000..531bfb1a693f3a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/react_native.pysnap @@ -0,0 +1,163 @@ +--- +created: '2025-11-04T12:54:22.311110+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "73470e545e51eea9cff8a6c006f68f57" + contributing component: exception + hint: None + root_component: + app* + exception* + 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@2025_with_threads/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 00000000000000..fe980c28cd02d8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,38 @@ +--- +created: '2025-11-04T12:54:22.440219+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 00000000000000..8309d7f33814ab --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,42 @@ +--- +created: '2025-11-04T12:54:22.453879+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap new file mode 100644 index 00000000000000..7b1d2eef013cc6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap @@ -0,0 +1,38 @@ +--- +created: '2025-11-04T12:54:22.468335+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "log_demo::main" + type* + "log_demo" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap new file mode 100644 index 00000000000000..bad45c373ec665 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap @@ -0,0 +1,66 @@ +--- +created: '2025-11-04T12:54:22.482679+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + type* + "log_demo" + system* + hash: "cb57cfc73cc622c2ac1386c9ea531fb9" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "log_demo" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap new file mode 100644 index 00000000000000..8d64fde40f3974 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap @@ -0,0 +1,60 @@ +--- +created: '2025-11-04T12:54:22.498148+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + type* + "log_demo" + system* + hash: "0817e4e604fbe88c4534eff166df1db9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame* + function* + "std::panicking::try::do_call" + frame* + function* + "log_demo::main" + type* + "log_demo" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 00000000000000..af28888ac3d9b3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T12:54:22.513030+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap new file mode 100644 index 00000000000000..1371dc99bb5542 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T12:54:22.526750+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap new file mode 100644 index 00000000000000..d32c49ee7aa80e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap @@ -0,0 +1,38 @@ +--- +created: '2025-11-04T12:54:22.540435+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "6f2033bfef1d2e512e337df0fdcb0cbf" + 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@2025_with_threads/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_no_hash.pysnap new file mode 100644 index 00000000000000..ba43c4eff4fb1b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/threads_no_hash.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T12:54:22.553668+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/unity.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unity.pysnap new file mode 100644 index 00000000000000..75c154af8fe178 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unity.pysnap @@ -0,0 +1,90 @@ +--- +created: '2025-11-04T12:54:22.568277+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "a12d579fed7636c2a5d2fae110c95ce5" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "samplescript.cs" + function* + "SampleScript.ThrowNull ()" + type* + "NullReferenceException" + system* + hash: "c0dbeebf0430b3310ad1f7ceb48553a6" + contributing component: exception + hint: None + root_component: + system* + exception* + 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 ()" + type* + "NullReferenceException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unknown_variant.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unknown_variant.pysnap new file mode 100644 index 00000000000000..9d161034d056c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unknown_variant.pysnap @@ -0,0 +1,21 @@ +--- +created: '2025-11-04T13:05:50.340705+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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@2025_with_threads/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap new file mode 100644 index 00000000000000..b05d07382d29bb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap @@ -0,0 +1,207 @@ +--- +created: '2025-11-04T12:54:22.583945+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "ecb890e5cd60dec2b626d500cc866de4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + type* + "EXC_BAD_ACCESS" + system* + hash: "57493ac3e558feffb778cf170a7fd986" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "EXC_BAD_ACCESS" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 00000000000000..383cde26bf82a4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,146 @@ +--- +created: '2025-11-04T12:54:22.599405+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "android_main" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AndroidMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UGameEngine::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UWorld::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::ProcessLatentActions" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::TickLatentActionForObject" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AActor::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace 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@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..991d46a79685c4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,246 @@ +--- +created: '2025-11-04T12:54:22.616422+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + system* + hash: "d0669f63f03ddaec66ac8b9f4e3e449d" + 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" + frame* + function* + "RaiseException" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 00000000000000..fc971f93836741 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,195 @@ +--- +created: '2025-11-04T12:54:22.635705+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "e7a1be23aff9a117598bb893ed4bedb4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + type* + "Ensure failed" + system* + hash: "1bba3ace796a07d167af26959c6039c9" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Ensure failed" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..739d167e0588bd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,274 @@ +--- +created: '2025-11-04T12:54:22.653261+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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: "4717aeb08ff642726ef6ea8f1ce55cdf" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + type* + "Ensure failed" + system* + hash: "65244b22630821cacd0be603ebcef671" + 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* + "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" + type* + "Ensure failed" diff --git a/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap new file mode 100644 index 00000000000000..569049a70eb6d3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouphash_metadata/test_metadata_from_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap @@ -0,0 +1,206 @@ +--- +created: '2025-11-04T12:54:22.669412+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouphash_metadata.py +--- +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 stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::execLetObj" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessContextOpcode" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::CallFunction" + frame* (marked in-app by stack trace 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@2025_with_threads/actix.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/actix.pysnap new file mode 100644 index 00000000000000..423fead16c8f69 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/actix.pysnap @@ -0,0 +1,5221 @@ +--- +created: '2025-11-04T13:05:51.217011+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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}}" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "738e7d2503464bc264b4f791286f5122", + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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}}" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "19a96e0438d28e48355653def82f887a", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/android_anr.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/android_anr.pysnap new file mode 100644 index 00000000000000..e8c7b64b6f7870 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/android_anr.pysnap @@ -0,0 +1,7879 @@ +--- +created: '2025-11-04T13:05:51.242731+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "521a2e193e67a25df1006cb02ee24bd6", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/aspnetcore.pysnap new file mode 100644 index 00000000000000..bca8319a7e135c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/aspnetcore.pysnap @@ -0,0 +1,2242 @@ +--- +created: '2025-11-04T13:05:51.261583+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "228c649a3aa0901622c0a0e66ab0522c", + "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." + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "4ccd0f1953483581ba360c7518f90332", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/block_invoke.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/block_invoke.pysnap new file mode 100644 index 00000000000000..0471fe906c6fe1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/block_invoke.pysnap @@ -0,0 +1,342 @@ +--- +created: '2025-11-04T13:05:51.277671+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": true, + "hint": "marked in-app by stack trace 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": [ + "__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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "ff6c4ee7c54f118a9647ee86f0c2b0b0", + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/bugly.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/bugly.pysnap new file mode 100644 index 00000000000000..a6756aab90eb89 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/bugly.pysnap @@ -0,0 +1,623 @@ +--- +created: '2025-11-04T13:05:51.295555+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 00000000000000..1947103f34bf24 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,229 @@ +--- +created: '2025-11-04T13:05:51.329338+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": "5d731dcf8ecc4f042eeacf528d8d8da9", + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 00000000000000..d88fdcf34c5310 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,233 @@ +--- +created: '2025-11-04T13:05:51.312430+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": "5d731dcf8ecc4f042eeacf528d8d8da9", + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/callee_guaranteed.pysnap new file mode 100644 index 00000000000000..01b663a8c4ccd6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/callee_guaranteed.pysnap @@ -0,0 +1,2153 @@ +--- +created: '2025-11-04T13:05:51.345987+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 in-app by the client but ignored by stack trace 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": "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 by stack trace 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": "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": [ + "@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 in-app by the client but ignored by stack trace 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": "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 by stack trace 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": "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": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "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": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "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": [ + "@callee_guaranteed" + ] + } + ] + }, + { + "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": [ + "@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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4ef1fb44d656c3be2a146971f2a222dc", + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "47481871aa8d5ab5729cf2db78ce3032", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_no_regex_match.pysnap new file mode 100644 index 00000000000000..9d3d092128b2f1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_no_regex_match.pysnap @@ -0,0 +1,17 @@ +--- +created: '2025-11-04T13:05:51.363255+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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@2025_with_threads/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_regex_match.pysnap new file mode 100644 index 00000000000000..cffb7a862c8270 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/checksum_regex_match.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:05:51.380017+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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@2025_with_threads/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 00000000000000..c790e7c2468a99 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,1086 @@ +--- +created: '2025-11-04T13:05:51.396851+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app) but ignored by stack trace 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": "marked in-app by stack trace 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 in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app) but ignored by stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/connection_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/connection_error.pysnap new file mode 100644 index 00000000000000..98020c8cae02cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/connection_error.pysnap @@ -0,0 +1,1160 @@ +--- +created: '2025-11-04T13:05:51.414574+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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,))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "6b059b9febc815ac18ac4d2082e38a9b", + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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,))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "013d3477a774fe20c468dc8accd516f1", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap new file mode 100644 index 00000000000000..52c9964d30ff30 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap @@ -0,0 +1,483 @@ +--- +created: '2025-11-04T13:05:51.431594+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace rule (function:recordMetrics +app) but ignored by stack trace 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 stack trace 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!');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "161ce02ecc5d6685a72e8e520ab726b3", + "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 stack trace 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 stack trace 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!');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c5e4b4a9ad1803c4d4ca7feee5e430ae", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_frames.pysnap new file mode 100644 index 00000000000000..e24e8ac4ee4786 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/contributing_system_frames.pysnap @@ -0,0 +1,399 @@ +--- +created: '2025-11-04T13:05:51.448642+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace rule (function:recordMetrics +app) but ignored by stack trace 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);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "fe92cff6711f8a0a30cabb8b9245b1d6", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp.pysnap new file mode 100644 index 00000000000000..b7a38a38fb467c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp.pysnap @@ -0,0 +1,85 @@ +--- +created: '2025-11-04T13:05:51.572227+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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'" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_img_src.pysnap new file mode 100644 index 00000000000000..3c74f46acaeb81 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_img_src.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.464025+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap new file mode 100644 index 00000000000000..487c6b105dd2d5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.479034+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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'" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_data_uri.pysnap new file mode 100644 index 00000000000000..ee4a0592a9fec7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_data_uri.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.493319+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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:" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 00000000000000..6d7caeb90f4ece --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,87 @@ +--- +created: '2025-11-04T13:05:51.509923+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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'" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 00000000000000..59409dfd9aad79 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,87 @@ +--- +created: '2025-11-04T13:05:51.525087+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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'" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_uri.pysnap new file mode 100644 index 00000000000000..3af2ceff6cecc8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_script_src_uri.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.539434+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_style_src_elem.pysnap new file mode 100644 index 00000000000000..13a56b1297af22 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/csp_style_src_elem.pysnap @@ -0,0 +1,85 @@ +--- +created: '2025-11-04T13:05:51.555826+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 ''" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client.pysnap new file mode 100644 index 00000000000000..1458eb5ed5f39d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client.pysnap @@ -0,0 +1,1661 @@ +--- +created: '2025-11-04T13:05:51.614089+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom fingerprint", + "hash": "f30afa00b85f5cac5ee0bce01b31f08d", + "hint": null, + "key": "custom_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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 00000000000000..d9fa23ee4f0564 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,1660 @@ +--- +created: '2025-11-04T13:05:51.593601+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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_fingerprint": { + "client_values": [ + "celery", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom fingerprint", + "hash": "554e214208f0372603dc9fa6c1c0965f", + "hint": null, + "key": "custom_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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap new file mode 100644 index 00000000000000..190af30a290cac --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,1655 @@ +--- +created: '2025-11-04T13:05:51.632870+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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_fingerprint": { + "contributes": true, + "description": "custom fingerprint", + "hash": "554e214208f0372603dc9fa6c1c0965f", + "hint": null, + "key": "custom_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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/empty.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/empty.pysnap new file mode 100644 index 00000000000000..516ff54d7a31e0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/empty.pysnap @@ -0,0 +1,15 @@ +--- +created: '2025-11-04T13:05:51.646732+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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@2025_with_threads/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap new file mode 100644 index 00000000000000..6aeb55f5b9cf3c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap @@ -0,0 +1,1596 @@ +--- +created: '2025-11-04T13:05:51.665416+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes.pysnap new file mode 100644 index 00000000000000..afa518f134b22c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.714722+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap new file mode 100644 index 00000000000000..902296ec38f91a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap @@ -0,0 +1,209 @@ +--- +created: '2025-11-04T13:05:51.681607+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "9509e122c6175606d52862fa4f64853c", + "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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap new file mode 100644 index 00000000000000..b80465b14026a1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap @@ -0,0 +1,355 @@ +--- +created: '2025-11-04T13:05:51.698916+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "669cb6664e0f5fed38665da04e464f7e", + "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": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 00000000000000..f21bfb8f5f46ae --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,150 @@ +--- +created: '2025-11-04T13:05:51.730869+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 00000000000000..01d7332a11adb3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.763247+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 00000000000000..8a404eb289b69f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.746497+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 00000000000000..5c94a59a3735fd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.780080+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap new file mode 100644 index 00000000000000..e6f7512ea71603 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.797336+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 00000000000000..00a460379bdb9c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.816113+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 00000000000000..93547794413317 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.835000+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 00000000000000..d8d10fc49476c4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.854500+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 00000000000000..c92141bcc0abf4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.874038+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_exception.pysnap new file mode 100644 index 00000000000000..73f985c296aa36 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_exception.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.890976+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 00000000000000..898a30be98f780 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.913319+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 00000000000000..5fd03bf9697794 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,150 @@ +--- +created: '2025-11-04T13:05:51.931186+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 00000000000000..0f3a0e7b02ba59 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:51.967560+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 00000000000000..0fcaa7f10bb73a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:51.950500+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 00000000000000..1e20d84b9cb2d1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,528 @@ +--- +created: '2025-11-04T13:05:51.987655+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "d505dfb9059ac63c11955233323a9100", + "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" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "4f9cc6a81f4eb34f9e917374f281b9dc", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types.pysnap new file mode 100644 index 00000000000000..ae5baf09f3806b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types.pysnap @@ -0,0 +1,150 @@ +--- +created: '2025-11-04T13:05:52.025145+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 00000000000000..8fb6eb3d3ad498 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,150 @@ +--- +created: '2025-11-04T13:05:52.005944+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap new file mode 100644 index 00000000000000..4f6e435533bcf3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap @@ -0,0 +1,319 @@ +--- +created: '2025-11-04T13:05:52.043715+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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);" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "26552f86ca2368e708afa1df6effc1c5", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_type.pysnap new file mode 100644 index 00000000000000..dc06c5dd4dfbd1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_type.pysnap @@ -0,0 +1,74 @@ +--- +created: '2025-11-04T13:05:52.060939+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_value.pysnap new file mode 100644 index 00000000000000..0c1670fc24bc7d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/exception_without_value.pysnap @@ -0,0 +1,74 @@ +--- +created: '2025-11-04T13:05:52.074620+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/expectct.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/expectct.pysnap new file mode 100644 index 00000000000000..0bb86748d79113 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/expectct.pysnap @@ -0,0 +1,69 @@ +--- +created: '2025-11-04T13:05:52.090214+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "expect_ct": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "expect_ct", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "expect-ct" + ] + }, + { + "contributes": true, + "hint": null, + "id": "hostname", + "name": "hostname", + "values": [ + "example.com" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "hostname", + "hash": "3d2933f4b5ec459ec8d569a398fd328c", + "hint": null, + "key": "expect_ct", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap new file mode 100644 index 00000000000000..7318699e9d816d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap @@ -0,0 +1,515 @@ +--- +created: '2025-11-04T13:05:52.106831+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "87497299851e09febfecf4e84e0d45ba", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..ab6860e4e2117a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.122262+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_empty_list.pysnap new file mode 100644 index 00000000000000..fe78cccf3b4615 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_empty_list.pysnap @@ -0,0 +1,101 @@ +--- +created: '2025-11-04T13:05:52.135997+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..f99d5a5a739a57 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.150491+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 00000000000000..6b84d05cfb86b9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.164212+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..08bd4368ef4650 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.178451+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 00000000000000..c35ad4cfa4f565 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,169 @@ +--- +created: '2025-11-04T13:05:52.194054+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..0f346e7bf61e42 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.208992+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..433e39ac8d3574 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.223315+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..6866eb725a53e5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.237395+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 00000000000000..dd23cd732dd089 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,343 @@ +--- +created: '2025-11-04T13:05:52.251408+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 00000000000000..30199c53858a77 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.267097+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 00000000000000..f87531504e7a74 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,165 @@ +--- +created: '2025-11-04T13:05:52.281021+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap new file mode 100644 index 00000000000000..72b4265b9e04df --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,179 @@ +--- +created: '2025-11-04T13:05:52.295140+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap new file mode 100644 index 00000000000000..6a773c44bb366d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,179 @@ +--- +created: '2025-11-04T13:05:52.309212+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 00000000000000..661e60aa57a61a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,165 @@ +--- +created: '2025-11-04T13:05:52.323904+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 00000000000000..7a15f9c5a07023 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.338168+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 00000000000000..ff2f76e0ceadc3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.353166+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 00000000000000..7a543d11e22dec --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.367662+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist.pysnap new file mode 100644 index 00000000000000..7d9609fd683c6a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.411834+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap new file mode 100644 index 00000000000000..5e6f59327149ba --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.383166+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap new file mode 100644 index 00000000000000..aaabab24f40177 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.397473+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_module_if_page_url.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap new file mode 100644 index 00000000000000..5f32c8af895875 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap @@ -0,0 +1,169 @@ +--- +created: '2025-11-04T13:05:52.439799+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo/bar/baz" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": true, + "hint": null, + "id": "module", + "name": null, + "values": [ + "foo/bar/baz" + ] + }, + { + "contributes": false, + "hint": "ignored because frame points to a URL", + "id": "filename", + "name": null, + "values": [ + "foo.py" + ] + }, + { + "contributes": false, + "hint": null, + "id": "function", + "name": null, + "values": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap new file mode 100644 index 00000000000000..5e268e753ef569 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap @@ -0,0 +1,165 @@ +--- +created: '2025-11-04T13:05:52.426134+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 bad javascript module", + "id": "module", + "name": null, + "values": [ + "foo/bar/baz" + ] + }, + { + "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": [ + "a" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 bad javascript module", + "id": "module", + "name": null, + "values": [ + "foo/bar/baz" + ] + }, + { + "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": [ + "a" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "event-level stacktrace — all frames", + "hash": "0cc175b9c0f1b6a831c399e269772661", + "hint": null, + "key": "system_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap new file mode 100644 index 00000000000000..1b0f1a2a00b2a2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.455677+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 00000000000000..8c6836175a0edc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,565 @@ +--- +created: '2025-11-04T13:05:52.472366+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 00000000000000..9c00a0823d0916 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,169 @@ +--- +created: '2025-11-04T13:05:52.496253+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 00000000000000..a7ca665cd1900e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,169 @@ +--- +created: '2025-11-04T13:05:52.514355+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 00000000000000..4810fd579898a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.549591+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 00000000000000..84f01a4e7ff054 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.532685+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 00000000000000..eba838f44440c1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,227 @@ +--- +created: '2025-11-04T13:05:52.566809+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap new file mode 100644 index 00000000000000..25541be7520b92 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.584194+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 00000000000000..09cb8dc726ca26 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.601354+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 00000000000000..510465b68080ba --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,157 @@ +--- +created: '2025-11-04T13:05:52.636692+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 00000000000000..afd2024360dcea --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,157 @@ +--- +created: '2025-11-04T13:05:52.619327+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap new file mode 100644 index 00000000000000..b9ea5a2dd5c27e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,179 @@ +--- +created: '2025-11-04T13:05:52.653744+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap new file mode 100644 index 00000000000000..658507152884ba --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap @@ -0,0 +1,161 @@ +--- +created: '2025-11-04T13:05:52.670588+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap new file mode 100644 index 00000000000000..e20c08ec948183 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap @@ -0,0 +1,157 @@ +--- +created: '2025-11-04T13:05:52.687634+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/go_pkg_mod.pysnap new file mode 100644 index 00000000000000..5894f1a20cf7c0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/go_pkg_mod.pysnap @@ -0,0 +1,287 @@ +--- +created: '2025-11-04T13:05:52.707213+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4b8bbc500bd2cabfcadc1f1be867e0bb", + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "348fc4026c9fa11ffba8fbfa80a134c9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_125_event_126.pysnap new file mode 100644 index 00000000000000..fb89fe0910bafd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_125_event_126.pysnap @@ -0,0 +1,2531 @@ +--- +created: '2025-11-04T13:05:52.728709+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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_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 stack trace 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": [ + "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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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": [ + "dyld::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoader::link" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoader::recursiveRebase" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoaderMachOCompressed::rebase" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_200_event_200.pysnap new file mode 100644 index 00000000000000..c8200de85f4a8b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_200_event_200.pysnap @@ -0,0 +1,1635 @@ +--- +created: '2025-11-04T13:05:52.751695+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_275_event_275.pysnap new file mode 100644 index 00000000000000..9fadd70628db61 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_275_event_275.pysnap @@ -0,0 +1,1891 @@ +--- +created: '2025-11-04T13:05:52.773013+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_289_event_312.pysnap new file mode 100644 index 00000000000000..37e8e4381f6d58 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_289_event_312.pysnap @@ -0,0 +1,1651 @@ +--- +created: '2025-11-04T13:05:52.793860+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "9c336f632f6764c0f082a6a66edbf22d", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_294.pysnap new file mode 100644 index 00000000000000..c96eb1ddbb66ef --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_294.pysnap @@ -0,0 +1,2589 @@ +--- +created: '2025-11-04T13:05:52.816840+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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": 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 stack trace 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": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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 stack trace 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 stack trace 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": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "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 stack trace 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::__1::thread::~thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "default_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "49b6f72b6635cb43190c57ee56b026b0", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_329.pysnap new file mode 100644 index 00000000000000..8f0aa011a17dbe --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_294_event_329.pysnap @@ -0,0 +1,2675 @@ +--- +created: '2025-11-04T13:05:52.838259+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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_root_queues_init_once" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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_root_queue_drain" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_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 stack trace 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": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "map" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::map::~map" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::~__tree" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "__tree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::__tree::destroy" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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 stack trace 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 stack trace 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": [ + "mac" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::__1::pair::~pair" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "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 stack trace 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::terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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::__terminate" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "demangling_terminate_handler" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "abort_message" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "49b6f72b6635cb43190c57ee56b026b0", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_307.pysnap new file mode 100644 index 00000000000000..f5b8d95509d875 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_307.pysnap @@ -0,0 +1,1139 @@ +--- +created: '2025-11-04T13:05:52.858628+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_657.pysnap new file mode 100644 index 00000000000000..601b967ecdd9ae --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_307_event_657.pysnap @@ -0,0 +1,1185 @@ +--- +created: '2025-11-04T13:05:52.878513+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_313.pysnap new file mode 100644 index 00000000000000..bdadd52d5bd2c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_313.pysnap @@ -0,0 +1,3805 @@ +--- +created: '2025-11-04T13:05:52.901400+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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_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 stack trace 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": [ + "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 stack trace rule (family:native 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": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "8be5979a334287a1b47457228f1d4612", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_333.pysnap new file mode 100644 index 00000000000000..a3b92e55ca26ec --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_313_event_333.pysnap @@ -0,0 +1,3647 @@ +--- +created: '2025-11-04T13:05:52.926217+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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_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 stack trace 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": [ + "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 stack trace rule (family:native 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": [ + "_objc_msgSend_uncached" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "lookUpImpOrForward" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "initializeAndMaybeRelock" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "initializeNonMetaClass" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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": [ + "dyld::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoader::runInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoader::processInitializers" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoader::recursiveInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoaderMachO::doInitialization" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "ImageLoaderMachO::doModInitFunctions" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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": [ + "__abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "8be5979a334287a1b47457228f1d4612", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_319_event_321.pysnap new file mode 100644 index 00000000000000..936d75f5a4cf51 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_319_event_321.pysnap @@ -0,0 +1,3867 @@ +--- +created: '2025-11-04T13:05:52.948464+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": [ + "__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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "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 stack trace rule (family:native 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": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "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": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": [ + "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": [ + "CGLTexImageIOSurface2D" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": null, + "id": "module", + "name": null, + "values": [] + }, + { + "contributes": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "7e64037e487c78ce0439f750a2ef503f", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_389_event_389.pysnap new file mode 100644 index 00000000000000..e44197b593ee0b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_389_event_389.pysnap @@ -0,0 +1,767 @@ +--- +created: '2025-11-04T13:05:52.968058+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace rule (family:native 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_testcancel" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_432.pysnap new file mode 100644 index 00000000000000..05d644dfeb987d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_432.pysnap @@ -0,0 +1,2279 @@ +--- +created: '2025-11-04T13:05:52.988886+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "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": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "6148c73af04344a8597354711f5951ea", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_453.pysnap new file mode 100644 index 00000000000000..eba5f5bb92b635 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_432_event_453.pysnap @@ -0,0 +1,2279 @@ +--- +created: '2025-11-04T13:05:53.009742+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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": [ + "xtree" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "std::_Tree::insert" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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": [ + "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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "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": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "1056f62d72ff8b4d0c3842d696dbb10a", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_445_event_445.pysnap new file mode 100644 index 00000000000000..3ef33e7283dd05 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/group_445_event_445.pysnap @@ -0,0 +1,2489 @@ +--- +created: '2025-11-04T13:05:53.032269+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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::assign" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace 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::_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 stack trace 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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "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": [ + "crashpad_client_win.cc" + ] + }, + { + "contributes": true, + "hint": null, + "id": "function", + "name": null, + "values": [ + "crashpad::`anonymous namespace'::HandleAbortSignal" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "15526a7b64e9b5dc6d89e7ebec864260", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hpkp.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hpkp.pysnap new file mode 100644 index 00000000000000..114b70f2aa046f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hpkp.pysnap @@ -0,0 +1,69 @@ +--- +created: '2025-11-04T13:05:53.047358+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "hpkp": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "hpkp", + "name": null, + "values": [ + { + "contributes": true, + "hint": "a static salt", + "id": "salt", + "name": null, + "values": [ + "hpkp" + ] + }, + { + "contributes": true, + "hint": null, + "id": "hostname", + "name": "hostname", + "values": [ + "example.com" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "hostname", + "hash": "1e37a374cb33572622d02ff7a6237c44", + "hint": null, + "key": "hpkp", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap new file mode 100644 index 00000000000000..16a50700493c95 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap @@ -0,0 +1,84 @@ +--- +created: '2025-11-04T13:05:53.064095+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception message and custom fingerprint", + "hash": "e3d593b4335190212ca7c18b8e967fb1", + "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@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 00000000000000..22cc38764f3cdb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,1663 @@ +--- +created: '2025-11-04T13:05:53.081882+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames and custom fingerprint", + "hash": "19163f3ca34f5995c69d85351ce3d697", + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames and custom fingerprint", + "hash": "847950eb44d280e6758d136c763d6ddc", + "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@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 00000000000000..b6bc01ebe61297 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,1660 @@ +--- +created: '2025-11-04T13:05:53.100621+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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_fingerprint": { + "client_values": [ + "{{ default }}", + "SoftTimeLimitExceeded", + "sentry.tasks.store.process_event" + ], + "contributes": true, + "description": "custom fingerprint", + "hash": "554e214208f0372603dc9fa6c1c0965f", + "hint": null, + "key": "custom_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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 00000000000000..7b61ee9402d3ec --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,84 @@ +--- +created: '2025-11-04T13:05:53.120609+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception message and custom fingerprint", + "hash": "5b5ad5a0fbb4deb5e3fc631ce42681ae", + "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@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 00000000000000..449dd89de4547e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,84 @@ +--- +created: '2025-11-04T13:05:53.151096+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception message and custom fingerprint", + "hash": "c5578778212497f1ff3435405e2a4a98", + "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@2025_with_threads/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/in_app_in_ui.pysnap new file mode 100644 index 00000000000000..5032e79f858194 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/in_app_in_ui.pysnap @@ -0,0 +1,2319 @@ +--- +created: '2025-11-04T13:05:53.174058+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 in-app by the client but ignored by stack trace 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": "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 in-app by the client but ignored by stack trace 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": "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/java_chained.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_chained.pysnap new file mode 100644 index 00000000000000..f3c51b763ca08d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_chained.pysnap @@ -0,0 +1,3984 @@ +--- +created: '2025-11-04T13:05:53.199390+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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/]]" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "1959b227a7cf6acf7f3fd401b5d9f09b", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_minimal.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_minimal.pysnap new file mode 100644 index 00000000000000..34bd0bc7d4390a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/java_minimal.pysnap @@ -0,0 +1,4042 @@ +--- +created: '2025-11-04T13:05:53.221519+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "ef2555bf7958ada8eefafbfdaed1c409", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 00000000000000..4f1d313fc85681 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:53.254410+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 00000000000000..5ba1d4b5f83c8a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:53.237672+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap new file mode 100644 index 00000000000000..5526de8acf81a3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap @@ -0,0 +1,939 @@ +--- +created: '2025-11-04T13:05:53.272823+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c0f3f7d6deb17aec9d07259ac684fad0", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message.pysnap new file mode 100644 index 00000000000000..c1be7f38502d9d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.304568+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "event" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message_parameterization.pysnap new file mode 100644 index 00000000000000..a2c883e9ac6b67 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_message_parameterization.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.289053+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 , , " + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_polyfills.pysnap new file mode 100644 index 00000000000000..9de9713d6f10ee --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_polyfills.pysnap @@ -0,0 +1,345 @@ +--- +created: '2025-11-04T13:05:53.321546+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_unpkg.pysnap new file mode 100644 index 00000000000000..b224bf17272eaa --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_unpkg.pysnap @@ -0,0 +1,415 @@ +--- +created: '2025-11-04T13:05:53.339243+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "6ab78545e13144405fb21dadb9045b91", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap new file mode 100644 index 00000000000000..f9131ae4ee4938 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,799 @@ +--- +created: '2025-11-04T13:05:53.358112+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c63e8727af1a8fe75872b6a762797113", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap new file mode 100644 index 00000000000000..cb18e0dc2ac3ac --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap @@ -0,0 +1,807 @@ +--- +created: '2025-11-04T13:05:53.375637+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c63e8727af1a8fe75872b6a762797113", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap new file mode 100644 index 00000000000000..67be03ef78f293 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,737 @@ +--- +created: '2025-11-04T13:05:53.393078+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c63e8727af1a8fe75872b6a762797113", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 00000000000000..fe0ab1230133e2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,835 @@ +--- +created: '2025-11-04T13:05:53.409567+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b2602ad455472dede8e4c340d8a7eaba", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 00000000000000..ef28068c4e985c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,843 @@ +--- +created: '2025-11-04T13:05:53.427630+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b2602ad455472dede8e4c340d8a7eaba", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 00000000000000..abcbb5ecb8a9a0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,773 @@ +--- +created: '2025-11-04T13:05:53.444585+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b2602ad455472dede8e4c340d8a7eaba", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 00000000000000..ae28faa2ae82de --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,897 @@ +--- +created: '2025-11-04T13:05:53.461190+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b2602ad455472dede8e4c340d8a7eaba", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap new file mode 100644 index 00000000000000..b464bc55d62b52 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap @@ -0,0 +1,865 @@ +--- +created: '2025-11-04T13:05:53.477234+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c63e8727af1a8fe75872b6a762797113", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 00000000000000..a9bf6f2d56767c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,1731 @@ +--- +created: '2025-11-04T13:05:53.496089+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4a3cf3893b6485428dd02da116c8370e", + "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();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d5456487ea8dccfe96c1968b19870978", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 00000000000000..3295a923bb621c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,1445 @@ +--- +created: '2025-11-04T13:05:53.514286+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4a3cf3893b6485428dd02da116c8370e", + "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();" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "0b81da6ea3d7cc82b1d4825b7aac0b8d", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel.pysnap new file mode 100644 index 00000000000000..6d2465c1862a43 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel.pysnap @@ -0,0 +1,4343 @@ +--- +created: '2025-11-04T13:05:53.554628+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4665d486184740231357ab63f4543a8d", + "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');" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "107ed03036d901157372f260bc3df446", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel_anonymous.pysnap new file mode 100644 index 00000000000000..a56baa8409dae5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/laravel_anonymous.pysnap @@ -0,0 +1,395 @@ +--- +created: '2025-11-04T13:05:53.532856+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "a728cdf5d62c8e017c35c3fe04051b6e", + "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)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "63c67781779781d9b0a442a5b2bdb976", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_prefers_message.pysnap new file mode 100644 index 00000000000000..4468762f98e116 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_prefers_message.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.570927+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there %s!" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_uses_formatted.pysnap new file mode 100644 index 00000000000000..bc1ab568007406 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/logentry_uses_formatted.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.587745+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there world!" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_amd_driver.pysnap new file mode 100644 index 00000000000000..fd515340a9d8e4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_amd_driver.pysnap @@ -0,0 +1,3177 @@ +--- +created: '2025-11-04T13:05:53.608476+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "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": [ + "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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "b8baf791d22ac902d5f59a7eedd844fd", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_intel_driver.pysnap new file mode 100644 index 00000000000000..4c84fffc4ac6dd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/macos_intel_driver.pysnap @@ -0,0 +1,3905 @@ +--- +created: '2025-11-04T13:05:53.630888+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "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": 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": 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": 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": 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": [ + "__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 stack trace 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "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 stack trace rule (family:native 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": [ + "_sigtramp" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": [ + "NSRunAlertPanel" + ] + } + ] + }, + { + "contributes": false, + "hint": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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": "non app frame", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (family:native 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": [ + "abort" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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_kill" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "36be6e0b6123ef6ecfbef62f5cb88406", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/malloc_sentinel.pysnap new file mode 100644 index 00000000000000..e6354d401043ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/malloc_sentinel.pysnap @@ -0,0 +1,1659 @@ +--- +created: '2025-11-04T13:05:53.650414+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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 stack trace rule (category:throw ^-group)", + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "70b7b816193e06eb5d6649989fbaf605", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_prefers_message.pysnap new file mode 100644 index 00000000000000..55d56a059e7cdc --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_prefers_message.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.666416+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there %s!" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_uses_formatted.pysnap new file mode 100644 index 00000000000000..1a96d79197dc5f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_uses_formatted.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.682873+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "message": { + "component": { + "contributes": true, + "hint": null, + "id": "default", + "name": null, + "values": [ + { + "contributes": true, + "hint": null, + "id": "message", + "name": "message", + "values": [ + "Hello there Peter!" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_with_key_pair_values.pysnap new file mode 100644 index 00000000000000..5e59f08107fdb9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/message_with_key_pair_values.pysnap @@ -0,0 +1,52 @@ +--- +created: '2025-11-04T13:05:53.699207+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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..." + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "message", + "hash": "d2ab1028e9cb44352a824e878951f412", + "hint": null, + "key": "message", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/minified_javascript.pysnap new file mode 100644 index 00000000000000..e9f4148b4703de --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/minified_javascript.pysnap @@ -0,0 +1,2079 @@ +--- +created: '2025-11-04T13:05:53.718692+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_driver_crash1.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash1.pysnap new file mode 100644 index 00000000000000..4bf45988da8fca --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash1.pysnap @@ -0,0 +1,577 @@ +--- +created: '2025-11-04T13:05:53.754826+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash2.pysnap new file mode 100644 index 00000000000000..6bf2b4c91f2328 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash2.pysnap @@ -0,0 +1,511 @@ +--- +created: '2025-11-04T13:05:53.773909+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash3.pysnap new file mode 100644 index 00000000000000..382d600e116f24 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_driver_crash3.pysnap @@ -0,0 +1,635 @@ +--- +created: '2025-11-04T13:05:53.793611+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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": [] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_limit_frames.pysnap new file mode 100644 index 00000000000000..df0bd8c9f097b3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_limit_frames.pysnap @@ -0,0 +1,333 @@ +--- +created: '2025-11-04T13:05:53.813322+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_malloc_chain.pysnap new file mode 100644 index 00000000000000..97a12f5490532b --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_malloc_chain.pysnap @@ -0,0 +1,519 @@ +--- +created: '2025-11-04T13:05:53.832043+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_no_filenames.pysnap new file mode 100644 index 00000000000000..9740c519d1216f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_no_filenames.pysnap @@ -0,0 +1,1015 @@ +--- +created: '2025-11-04T13:05:53.849787+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [ + "" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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": [ + "" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_unlimited_frames.pysnap new file mode 100644 index 00000000000000..c2453a03e5f3d9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_unlimited_frames.pysnap @@ -0,0 +1,333 @@ +--- +created: '2025-11-04T13:05:53.866739+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap new file mode 100644 index 00000000000000..f9c2b3ca742b1a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap @@ -0,0 +1,477 @@ +--- +created: '2025-11-04T13:05:53.882343+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_with_function_name.pysnap new file mode 100644 index 00000000000000..7ebf348e93592a --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/native_with_function_name.pysnap @@ -0,0 +1,418 @@ +--- +created: '2025-11-04T13:05:53.899057+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_exception_weird.pysnap new file mode 100644 index 00000000000000..b54e49a1a2e416 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_exception_weird.pysnap @@ -0,0 +1,991 @@ +--- +created: '2025-11-04T13:05:53.915501+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "a20509269752c9a1bea6078851e4d39c", + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "252dc79eb5653bf822e2684d90734cb8", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_low_level_async.pysnap new file mode 100644 index 00000000000000..36b9cf8d71107d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/node_low_level_async.pysnap @@ -0,0 +1,283 @@ +--- +created: '2025-11-04T13:05:53.932794+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_exception_base.pysnap new file mode 100644 index 00000000000000..dc37374c95a5bb --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_exception_base.pysnap @@ -0,0 +1,355 @@ +--- +created: '2025-11-04T13:05:53.951092+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — in-app frames", + "hash": "c52ebcc2d9d0780a23c7d99831678830", + "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": [] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "chained exception stacktraces — all frames", + "hash": "669cb6664e0f5fed38665da04e464f7e", + "hint": null, + "key": "system_chained_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 00000000000000..5e801925c8a5d5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,1027 @@ +--- +created: '2025-11-04T13:05:53.968089+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "121caa876de75ec51bf72ed4c852cd75", + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "a5af2577d4caca8f983657c5d1919e14", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 00000000000000..bfb16d683c25df --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,1027 @@ +--- +created: '2025-11-04T13:05:53.984959+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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))" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "90888e813b09fa25061af2883c0fb9bd", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_http_error.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_http_error.pysnap new file mode 100644 index 00000000000000..6321703f1d1509 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/python_http_error.pysnap @@ -0,0 +1,456 @@ +--- +created: '2025-11-04T13:05:54.003284+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "d59239f5aad3304d60beb1fde3369b78", + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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)" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "133db3f366b1327dab4e661f66dfb961", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering.pysnap new file mode 100644 index 00000000000000..dfc92e8f2a9bec --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:54.053890+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 00000000000000..94732feed39f31 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,76 @@ +--- +created: '2025-11-04T13:05:54.019087+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 00000000000000..1db315c5fd1407 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,117 @@ +--- +created: '2025-11-04T13:05:54.037225+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/react_native.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_native.pysnap new file mode 100644 index 00000000000000..ce8206fe0e41b1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/react_native.pysnap @@ -0,0 +1,2057 @@ +--- +created: '2025-11-04T13:05:54.074154+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 00000000000000..3b1424d09057c1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,219 @@ +--- +created: '2025-11-04T13:05:54.207766+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 00000000000000..2a2005dd75b7cd --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,289 @@ +--- +created: '2025-11-04T13:05:54.222982+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_negated_match.pysnap new file mode 100644 index 00000000000000..c10a3edeb7875f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_negated_match.pysnap @@ -0,0 +1,581 @@ +--- +created: '2025-11-04T13:05:54.240198+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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::{{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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "eb87c1031dba55b67df86fb9fff59dc6", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust.pysnap new file mode 100644 index 00000000000000..018ccd0ff5d629 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust.pysnap @@ -0,0 +1,581 @@ +--- +created: '2025-11-04T13:05:54.257149+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "eb87c1031dba55b67df86fb9fff59dc6", + "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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "cb57cfc73cc622c2ac1386c9ea531fb9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust2.pysnap new file mode 100644 index 00000000000000..a440301f09514f --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_rust2.pysnap @@ -0,0 +1,581 @@ +--- +created: '2025-11-04T13:05:54.274788+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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 stack trace 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 stack trace 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::{{closure}}" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "eb87c1031dba55b67df86fb9fff59dc6", + "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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "0817e4e604fbe88c4534eff166df1db9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 00000000000000..f854d6d2947371 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,839 @@ +--- +created: '2025-11-04T13:05:54.288348+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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": [] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/template_compute_hashes.pysnap new file mode 100644 index 00000000000000..097bce4fea6055 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/template_compute_hashes.pysnap @@ -0,0 +1,69 @@ +--- +created: '2025-11-04T13:05:54.301884+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 %}" + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_compute_hashes.pysnap new file mode 100644 index 00000000000000..31c7b9797de5c0 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_compute_hashes.pysnap @@ -0,0 +1,177 @@ +--- +created: '2025-11-04T13:05:54.315329+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "thread stacktrace — in-app frames", + "hash": "6f2033bfef1d2e512e337df0fdcb0cbf", + "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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_no_hash.pysnap new file mode 100644 index 00000000000000..6fe5a7a8da615c --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/threads_no_hash.pysnap @@ -0,0 +1,58 @@ +--- +created: '2025-11-04T13:05:54.328876+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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": [] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/unity.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unity.pysnap new file mode 100644 index 00000000000000..13f334448c9166 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unity.pysnap @@ -0,0 +1,675 @@ +--- +created: '2025-11-04T13:05:54.345449+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 ()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "a12d579fed7636c2a5d2fae110c95ce5", + "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 ()" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "c0dbeebf0430b3310ad1f7ceb48553a6", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assert_mac.pysnap new file mode 100644 index 00000000000000..93cdfa915699e4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assert_mac.pysnap @@ -0,0 +1,2131 @@ +--- +created: '2025-11-04T13:05:54.363459+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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__1823_fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "marked out of app by stack trace rule (family:native 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 stack trace 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": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "ecb890e5cd60dec2b626d500cc866de4", + "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__1823_fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." + ] + }, + { + "contributes": true, + "hint": null, + "id": "stacktrace", + "name": "stacktrace", + "values": [ + { + "contributes": false, + "hint": "ignored by stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "57493ac3e558feffb778cf170a7fd986", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 00000000000000..adc3000fd0be1d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,1627 @@ +--- +created: '2025-11-04T13:05:54.380816+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace 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": [ + "__start_thread" + ] + } + ] + }, + { + "contributes": false, + "hint": "marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..7ba4a10938f6ce --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,2833 @@ +--- +created: '2025-11-04T13:05:54.399834+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": [ + "RaiseException" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": true, + "hint": null, + "id": "frame", + "name": null, + "values": [ + { + "contributes": false, + "hint": 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "d0669f63f03ddaec66ac8b9f4e3e449d", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 00000000000000..b26026d7988e8d --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,5711 @@ +--- +created: '2025-11-04T13:05:54.584926+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "e7a1be23aff9a117598bb893ed4bedb4", + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "1bba3ace796a07d167af26959c6039c9", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..5418758e891ba3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,3283 @@ +--- +created: '2025-11-04T13:05:54.605430+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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": [ + "UserCallWinProcCheckWow" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — in-app frames", + "hash": "4717aeb08ff642726ef6ea8f1ce55cdf", + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "contributes": true, + "description": "exception stacktrace — all frames", + "hash": "65244b22630821cacd0be603ebcef671", + "hint": null, + "key": "system_exception_stacktrace", + "type": "component" + } +} diff --git a/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap new file mode 100644 index 00000000000000..63b952b3058a2e --- /dev/null +++ b/tests/sentry/grouping/snapshots/grouping_info/test_grouping_info/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap @@ -0,0 +1,2698 @@ +--- +created: '2025-11-04T13:05:54.623427+00:00' +creator: sentry +source: tests/sentry/grouping/test_grouping_info.py +--- +{ + "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 stack trace rule (family:native 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 stack trace rule (family:native 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 stack trace 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": [ + "__NSThread__start__" + ] + } + ] + }, + { + "contributes": true, + "hint": "marked in-app by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app) but ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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" + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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]" + ] + } + ] + } + ] + } + ] + } + ] + }, + "config": { + "base": "newstyle:2025-11-21", + "delegates": [ + "frame:v1", + "single-exception:v1", + "stacktrace:v1" + ], + "id": "newstyle:2025-with-threads", + "strategies": [ + "chained-exception:v1", + "csp:v1", + "expect-ct:v1", + "expect-staple:v1", + "hpkp:v1", + "message:v1", + "stacktrace:v1", + "template:v1", + "threads:v1" + ] + }, + "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@2025_with_threads/actix.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/actix.pysnap new file mode 100644 index 00000000000000..2e9bfa93792804 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/actix.pysnap @@ -0,0 +1,792 @@ +--- +created: '2025-11-04T13:12:18.680518+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "738e7d2503464bc264b4f791286f5122" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked in-app by the client but ignored by stack trace 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 stack trace 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}}" + type* + "actix_web::pipeline" + value (ignored because stacktrace takes precedence) + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" +-------------------------------------------------------------------------- +system: + hash: "19a96e0438d28e48355653def82f887a" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + filename* + "panic.rs" + function* + "std::panic::catch_unwind" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + filename* + "panic.rs" + function* + "std::panic::AssertUnwindSafe::call_once" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "mod.rs" + function* + "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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}}" + type* + "actix_web::pipeline" + value (ignored because stacktrace takes precedence) + "Error occurred during request handling, status: Internal Server Error Something went really wrong here" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/android_anr.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/android_anr.pysnap new file mode 100644 index 00000000000000..d78eef040a13d5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/android_anr.pysnap @@ -0,0 +1,1574 @@ +--- +created: '2025-11-04T13:12:18.703610+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "ApplicationNotResponding" + value* (stripped event-specific values) + "Application Not Responding for at least ms." + 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: "521a2e193e67a25df1006cb02ee24bd6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace 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 stack trace rule (category:threadbase -group v-group)) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "java.lang.reflect.Method" + filename (ignored because module takes precedence) + "method.java" + function* + "invoke" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.app.ActivityThread" + filename (ignored because module takes precedence) + "activitythread.java" + function* + "main" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.os.Looper" + filename (ignored because module takes precedence) + "looper.java" + function* + "loop" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "dispatchMessage" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.os.Handler" + filename (ignored because module takes precedence) + "handler.java" + function* + "handleCallback" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer$FrameDisplayEventReceiver" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "doCallbacks" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.Choreographer$CallbackRecord" + filename (ignored because module takes precedence) + "choreographer.java" + function* + "run" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl$TraversalRunnable" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "run" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "doTraversal" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performTraversals" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewRootImpl" + filename (ignored because module takes precedence) + "viewrootimpl.java" + function* + "performLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "layoutVertical" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.LinearLayout" + filename (ignored because module takes precedence) + "linearlayout.java" + function* + "setChildFrame" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.View" + filename (ignored because module takes precedence) + "view.java" + function* + "layout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "onLayout" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.widget.FrameLayout" + filename (ignored because module takes precedence) + "framelayout.java" + function* + "layoutChildren" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "android.view.ViewGroup" + filename (ignored because module takes precedence) + "viewgroup.java" + function* + "layout" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayout" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "dispatchLayoutStep1" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "processAdapterUpdatesAndSetAnimationFlags" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.AdapterHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "consumeUpdatesInOnePass" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView$6" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionsForAdd" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView" + filename (ignored because module takes precedence) + "sourcefile" + function* + "offsetPositionRecordsForInsert" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.ChildHelper" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getUnfilteredChildAt" + frame (ignored by stack trace rule (category:internals -group)) + module* + "androidx.recyclerview.widget.RecyclerView$5" + filename (ignored because module takes precedence) + "sourcefile" + function* + "getChildAt" + type* + "ApplicationNotResponding" + value (ignored because stacktrace takes precedence) + "Application Not Responding for at least ms." + 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 stack trace 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@2025_with_threads/aspnetcore.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/aspnetcore.pysnap new file mode 100644 index 00000000000000..b137f278644cea --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/aspnetcore.pysnap @@ -0,0 +1,353 @@ +--- +created: '2025-11-04T13:12:18.722705+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "228c649a3aa0901622c0a0e66ab0522c" + contributing component: exception + hint: None + root_component: + app* + 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" + type* + "System.Exception" + value (ignored because stacktrace takes precedence) + "sync exception" +-------------------------------------------------------------------------- +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: "4ccd0f1953483581ba360c7518f90332" + contributing component: exception + hint: None + root_component: + 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" + filename (ignored because module takes precedence) + "valuescontroller.cs" + function* + "Get" + type* + "System.Exception" + value (ignored because stacktrace takes precedence) + "sync exception" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/block_invoke.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/block_invoke.pysnap new file mode 100644 index 00000000000000..a22d353ac672bd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/block_invoke.pysnap @@ -0,0 +1,49 @@ +--- +created: '2025-11-04T13:12:18.739689+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "ff6c4ee7c54f118a9647ee86f0c2b0b0" + 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 in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app)) + 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* + function* + "__99+[Something else]_block_invoke_2" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__00+[Something else]_block_invoke_2" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/bugly.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/bugly.pysnap new file mode 100644 index 00000000000000..8f32a97dd3092b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/bugly.pysnap @@ -0,0 +1,58 @@ +--- +created: '2025-11-04T13:12:18.756853+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type (ignored because exception is synthetic) + "SIGSEGV" + value* + "Segfault" +-------------------------------------------------------------------------- +system: + hash: "d9c9b0f9ba46e32fddd7cd1512fad235" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame + frame + frame (ignored due to recursion) + frame* + function* + "stripped_application_code" + frame* + function* + "__kernel_rt_sigreturn" + frame + frame + frame* + function* + "kill" + type (ignored because exception is synthetic) + "SIGSEGV" + value (ignored because stacktrace takes precedence) + "Segfault" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap new file mode 100644 index 00000000000000..8895231a623185 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error.pysnap @@ -0,0 +1,49 @@ +--- +created: '2025-11-04T13:12:18.790763+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "ChunkLoadError" + value* + "ChunkLoadError: something something..." +-------------------------------------------------------------------------- +built_in_fingerprint: + hash: "5d731dcf8ecc4f042eeacf528d8d8da9" + 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* + stacktrace* + frame* + module* + "foo.bar" + filename (ignored because module takes precedence) + "bar.tsx" + function* + "main" + type* + "ChunkLoadError" + value (ignored because stacktrace takes precedence) + "ChunkLoadError: something something..." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap new file mode 100644 index 00000000000000..f60bf3cb0c464e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/built_in_fingerprint_chunkload_error_hybrid_fingerprint.pysnap @@ -0,0 +1,49 @@ +--- +created: '2025-11-04T13:12:18.773527+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "ChunkLoadError" + value* + "ChunkLoadError: something else..." +-------------------------------------------------------------------------- +built_in_fingerprint: + hash: "5d731dcf8ecc4f042eeacf528d8d8da9" + 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* + stacktrace* + frame* + module* + "bar.bar" + filename (ignored because module takes precedence) + "foo.tsx" + function* + "main" + type* + "ChunkLoadError" + value (ignored because stacktrace takes precedence) + "ChunkLoadError: something else..." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap new file mode 100644 index 00000000000000..8f51b116fa1b30 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/callee_guaranteed.pysnap @@ -0,0 +1,258 @@ +--- +created: '2025-11-04T13:12:18.807551+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4ef1fb44d656c3be2a146971f2a222dc" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by the client) + function* + "start" + frame (marked in-app by the client but ignored by stack trace 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 in-app by the client but ignored by stack trace rule (category:internals -group)) + 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 by stack trace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked in-app by the client but ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (non app frame) + function* + "stripped_application_code" + frame (marked in-app by the client but ignored by stack trace rule (category:internals -group)) + 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 by stack trace rule (category:internals -group)) + filename* + "" + function* + "@callee_guaranteed" + frame (marked in-app by the client but ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (marked in-app by the client but ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (marked in-app by the client but ignored due to recursion) + filename* + "" + function* + "@callee_guaranteed" + frame (marked in-app by the client but ignored due to recursion) + 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" + type* + "" + ns_error* + domain* + "" + code* + 2 +-------------------------------------------------------------------------- +system: + hash: "47481871aa8d5ab5729cf2db78ce3032" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_main_queue_callback_4CF" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_call_block_and_release" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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" + type* + "" + ns_error* + domain* + "" + code* + 2 diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap new file mode 100644 index 00000000000000..c29a3536dbb864 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_no_regex_match.pysnap @@ -0,0 +1,9 @@ +--- +created: '2025-11-04T13:12:18.821614+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +hashed_checksum: + hash: "de46d023e69b171b90ccf3ebca7aede4" + checksum: "de46d023e69b171b90ccf3ebca7aede4" + raw_checksum: "not a legit checksum" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap new file mode 100644 index 00000000000000..fd19c837f6c8e3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/checksum_regex_match.pysnap @@ -0,0 +1,8 @@ +--- +created: '2025-11-04T13:12:18.835931+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +checksum: + hash: "11212012123120120415201309082013" + checksum: "11212012123120120415201309082013" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap new file mode 100644 index 00000000000000..4d8f73d8aa9c12 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/cocoa_dispatch_client_callout.pysnap @@ -0,0 +1,121 @@ +--- +created: '2025-11-04T13:12:18.852130+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "7c8a196d16b94be382add324be2605ee" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame* (marked in-app by stack trace 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 stack trace rule (family:native package:**/Containers/Bundle/Application/** +app)) + function* + "FudgeLogTaggedError" + frame (marked in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app) but ignored by stack trace rule (category:internals -group)) + function* + "closure" + frame* (marked in-app by stack trace 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 in-app by stack trace rule (family:native package:**/Containers/Bundle/Application/** +app) but ignored by stack trace rule (category:internals -group)) + 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 stack trace rule (category:internals -group)) + function* + "-[UIApplication _run]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_main_queue_drain" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_block_async_invoke2" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "-[NSBlockOperation main]" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "closure" + frame* + function* + "SentrySetupInteractor.setupSentry" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_lane_barrier_sync_invoke_and_complete" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_client_callout" + frame (ignored by stack trace rule (category:internals -group)) + function* + "closure" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/connection_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/connection_error.pysnap new file mode 100644 index 00000000000000..de26f7da01c74c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/connection_error.pysnap @@ -0,0 +1,237 @@ +--- +created: '2025-11-04T13:12:18.869755+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "6b059b9febc815ac18ac4d2082e38a9b" + contributing component: exception + hint: None + root_component: + app* + exception* + 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,))" + type* + "ConnectionError" + value (ignored because stacktrace takes precedence) + "Error while reading from socket: ('Connection closed by server.',)" +-------------------------------------------------------------------------- +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: "013d3477a774fe20c468dc8accd516f1" + contributing component: exception + hint: None + root_component: + system* + exception* + 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,))" + type* + "ConnectionError" + value (ignored because stacktrace takes precedence) + "Error while reading from socket: ('Connection closed by server.',)" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap new file mode 100644 index 00000000000000..939140a8a70805 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_and_app_frames.pysnap @@ -0,0 +1,86 @@ +--- +created: '2025-11-04T13:12:18.885660+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "161ce02ecc5d6685a72e8e520ab726b3" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by stack trace rule (function:runApp -app)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame (marked out of app by stack trace rule (function:handleRequest -app)) + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (marked in-app by stack trace rule (function:recordMetrics +app) but ignored by stack trace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" + frame* (marked in-app by stack trace rule (function:playFetch +app)) + filename* + "dogpark.js" + function* + "playFetch" + context_line* + "raise FailedToFetchError('Charlie didn't bring the ball back!');" + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" +-------------------------------------------------------------------------- +system: + hash: "c5e4b4a9ad1803c4d4ca7feee5e430ae" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace 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!');" + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap new file mode 100644 index 00000000000000..647bf333fabe3c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/contributing_system_frames.pysnap @@ -0,0 +1,72 @@ +--- +created: '2025-11-04T13:12:18.901442+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no contributing frames) + frame (marked out of app by stack trace rule (function:runApp -app)) + filename* + "app.js" + function* + "runApp" + context_line* + "return server.serve(port);" + frame (marked out of app by stack trace rule (function:handleRequest -app)) + filename* + "router.js" + function* + "handleRequest" + context_line* + "return handler(request);" + frame (marked in-app by stack trace rule (function:recordMetrics +app) but ignored by stack trace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" + type* + "FailedToFetchError" + value* + "FailedToFetchError: Charlie didn't bring the ball back!" +-------------------------------------------------------------------------- +system: + hash: "fe92cff6711f8a0a30cabb8b9245b1d6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (function:recordMetrics -group)) + filename* + "metrics.js" + function* + "recordMetrics" + context_line* + "return withMetrics(handler, metricName, tags);" + type* + "FailedToFetchError" + value (ignored because stacktrace takes precedence) + "FailedToFetchError: Charlie didn't bring the ball back!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp.pysnap new file mode 100644 index 00000000000000..3753425b1acf6f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp.pysnap @@ -0,0 +1,19 @@ +--- +created: '2025-11-04T13:12:19.013398+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_img_src.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_img_src.pysnap new file mode 100644 index 00000000000000..b06f45b81bef8a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_img_src.pysnap @@ -0,0 +1,17 @@ +--- +created: '2025-11-04T13:12:18.914636+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_no_blocked_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap new file mode 100644 index 00000000000000..fd8cf848e3755b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_no_blocked_uri.pysnap @@ -0,0 +1,17 @@ +--- +created: '2025-11-04T13:12:18.927759+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_script_data_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap new file mode 100644 index 00000000000000..e74fc0f6cd4c10 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_data_uri.pysnap @@ -0,0 +1,17 @@ +--- +created: '2025-11-04T13:12:18.941014+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_script_src_unsafe_eval.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap new file mode 100644 index 00000000000000..7b4da43fe07993 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_eval.pysnap @@ -0,0 +1,20 @@ +--- +created: '2025-11-04T13:12:18.956885+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_script_src_unsafe_inline.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap new file mode 100644 index 00000000000000..823e40337165dd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_unsafe_inline.pysnap @@ -0,0 +1,20 @@ +--- +created: '2025-11-04T13:12:18.972484+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_script_src_uri.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap new file mode 100644 index 00000000000000..218725f3b05181 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_script_src_uri.pysnap @@ -0,0 +1,17 @@ +--- +created: '2025-11-04T13:12:18.985642+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/csp_style_src_elem.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap new file mode 100644 index 00000000000000..4bbebb113bff04 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/csp_style_src_elem.pysnap @@ -0,0 +1,19 @@ +--- +created: '2025-11-04T13:12:18.999049+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/custom_fingerprint_client.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap new file mode 100644 index 00000000000000..013febaf0c2bf6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client.pysnap @@ -0,0 +1,341 @@ +--- +created: '2025-11-04T13:12:19.046779+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_fingerprint: + hash: "f30afa00b85f5cac5ee0bce01b31f08d" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap new file mode 100644 index 00000000000000..0a34a821dbc2cf --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_client_and_server_rule.pysnap @@ -0,0 +1,341 @@ +--- +created: '2025-11-04T13:12:19.029540+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_fingerprint: + hash: "554e214208f0372603dc9fa6c1c0965f" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap new file mode 100644 index 00000000000000..593b373a56845c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/custom_fingerprint_server_rule.pysnap @@ -0,0 +1,341 @@ +--- +created: '2025-11-04T13:12:19.064465+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_fingerprint: + hash: "554e214208f0372603dc9fa6c1c0965f" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/empty.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/empty.pysnap new file mode 100644 index 00000000000000..979191443c8058 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/empty.pysnap @@ -0,0 +1,7 @@ +--- +created: '2025-11-04T13:12:19.078052+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +fallback: + hash: "d41d8cd98f00b204e9800998ecf8427e" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap new file mode 100644 index 00000000000000..6982ce4b065281 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_cocoa_nserror.pysnap @@ -0,0 +1,170 @@ +--- +created: '2025-11-04T13:12:19.095872+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "029f3b967068b1539f96957b7c0451d7" + contributing component: exception + hint: None + root_component: + app* + exception* + type* + "iOS_Swift.SampleError" + ns_error* + domain* + "iOS_Swift.SampleError" + code* + 0 + value (ignored because ns-error info takes precedence) + "Code= Description=The operation couldn’t be completed. (iOS_Swift.SampleError error .)" + 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 stack trace 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 stack trace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "main" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__eventFetcherSourceCallback" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__processEventQueue" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIApplicationAccessibility sendEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIApplication sendEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIWindow sendEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIWindow _sendTouchesForEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIControl touchesEnded:withEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIControl _sendActionsForEvents:withEvent:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIControl sendAction:to:forEvent:]" + frame (ignored by stack trace rule (family:native function:__*[[]Sentry* -group)) + function* + "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2" + frame (ignored by stack trace 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@2025_with_threads/exception_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap new file mode 100644 index 00000000000000..ac4e5bff341d81 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.141568+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_compute_hashes_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap new file mode 100644 index 00000000000000..a550ffb1e68afe --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_2.pysnap @@ -0,0 +1,36 @@ +--- +created: '2025-11-04T13:12:19.110935+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "9509e122c6175606d52862fa4f64853c" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" +-------------------------------------------------------------------------- +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) + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap new file mode 100644 index 00000000000000..ff7023ba19e5b1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_compute_hashes_3.pysnap @@ -0,0 +1,56 @@ +--- +created: '2025-11-04T13:12:19.127530+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "669cb6664e0f5fed38665da04e464f7e" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" +-------------------------------------------------------------------------- +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* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + exception* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap new file mode 100644 index 00000000000000..5e0b60a2babcf9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_duplicate_id.pysnap @@ -0,0 +1,27 @@ +--- +created: '2025-11-04T13:12:19.159716+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap new file mode 100644 index 00000000000000..96bae1a674bf6d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.192089+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap new file mode 100644 index 00000000000000..5a777cb39709eb --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_inner_self_parenting_duplicate_id.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.175942+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_missing_parent.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap new file mode 100644 index 00000000000000..c2ce37f1c5fa0b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_missing_parent.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.208201+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_no_root.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap new file mode 100644 index 00000000000000..f394c413e90c01 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_no_root.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.223373+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap new file mode 100644 index 00000000000000..42fb8f991e9956 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_out_of_sequence.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.239080+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap new file mode 100644 index 00000000000000..82d38259d17697 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_root_self_parenting.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.254790+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap new file mode 100644 index 00000000000000..09c3c3c3372062 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_solo_self_parenting.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.269073+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_bad_with_cycle.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap new file mode 100644 index 00000000000000..fac464b7e82ec5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_bad_with_cycle.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.284095+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_one_exception.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap new file mode 100644 index 00000000000000..af5bd4bef687d2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_exception.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.298518+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap new file mode 100644 index 00000000000000..ccd889283e0fab --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_under_nested_groups.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.316070+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_one_type_with_different_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap new file mode 100644 index 00000000000000..afc27acd3fbb7e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_different_values.pysnap @@ -0,0 +1,27 @@ +--- +created: '2025-11-04T13:12:19.331661+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap new file mode 100644 index 00000000000000..52e34c7707fdf6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.364578+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap new file mode 100644 index 00000000000000..431d74d1ff2a9e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_one_type_with_similar_values_and_children.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:19.348776+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap new file mode 100644 index 00000000000000..c7a4af31b5ef18 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_exceptions_with_frames.pysnap @@ -0,0 +1,89 @@ +--- +created: '2025-11-04T13:12:19.382461+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "d505dfb9059ac63c11955233323a9100" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + 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" + type* + "DoStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the stuff" + exception* + 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" + type* + "DoOtherStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the other stuff" + exception* + type* + "System.AggregateException" + value* + "One or more errors occurred." +-------------------------------------------------------------------------- +system: + hash: "4f9cc6a81f4eb34f9e917374f281b9dc" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + stacktrace* + frame* + module* + "dostuff" + function* + "do_stuff" + frame* + module* + "dostuff" + function* + "do_different_stuff" + type* + "DoStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the stuff" + exception* + stacktrace* + frame* + module* + "dostuff" + function* + "do_other_stuff" + frame (ignored due to recursion) + module* + "dostuff" + function* + "do_other_stuff" + type* + "DoOtherStuffException" + value (ignored because stacktrace takes precedence) + "Can't do the other stuff" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap new file mode 100644 index 00000000000000..a21d15bb961c62 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types.pysnap @@ -0,0 +1,27 @@ +--- +created: '2025-11-04T13:12:19.423780+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap new file mode 100644 index 00000000000000..9387abc86127c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_groups_two_types_under_nested_groups.pysnap @@ -0,0 +1,27 @@ +--- +created: '2025-11-04T13:12:19.399328+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_javascript_no_in_app.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap new file mode 100644 index 00000000000000..1900433310d4cc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_javascript_no_in_app.pysnap @@ -0,0 +1,62 @@ +--- +created: '2025-11-04T13:12:19.444215+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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);" + type* + "TypeError" + value* + "Cannot read property 'submitError' of null" +-------------------------------------------------------------------------- +system: + hash: "26552f86ca2368e708afa1df6effc1c5" + contributing component: exception + hint: None + root_component: + system* + exception* + 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);" + type* + "TypeError" + value (ignored because stacktrace takes precedence) + "Cannot read property 'submitError' of null" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_type.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_type.pysnap new file mode 100644 index 00000000000000..68499f69cbe367 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_type.pysnap @@ -0,0 +1,14 @@ +--- +created: '2025-11-04T13:12:19.460356+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/exception_without_value.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_value.pysnap new file mode 100644 index 00000000000000..955951c92d249e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/exception_without_value.pysnap @@ -0,0 +1,14 @@ +--- +created: '2025-11-04T13:12:19.475402+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/expectct.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/expectct.pysnap new file mode 100644 index 00000000000000..a674bc43420578 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/expectct.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:19.490075+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +default: + hash: "3d2933f4b5ec459ec8d569a398fd328c" + contributing component: expect_ct + hint: None + root_component: + default* + expect_ct* + salt* (a static salt) + "expect-ct" + hostname* + "example.com" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap new file mode 100644 index 00000000000000..143ca2c360a00b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/fallback_prefix_level_1.pysnap @@ -0,0 +1,62 @@ +--- +created: '2025-11-04T13:12:19.504394+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "EXC_BAD_ACCESS" +-------------------------------------------------------------------------- +system: + hash: "87497299851e09febfecf4e84e0d45ba" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "GSEventRunModal" + frame* + function* + "objc_release" + type* + "EXC_BAD_ACCESS" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..e7ab18bd1ffeb4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_compute_hashes_ignores_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.518267+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_empty_list.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_empty_list.pysnap new file mode 100644 index 00000000000000..a258d2b69f327a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_empty_list.pysnap @@ -0,0 +1,23 @@ +--- +created: '2025-11-04T13:12:19.531795+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..c4a5da4ac41679 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.545795+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap new file mode 100644 index 00000000000000..1abf4ae53bef93 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_fast_class_by_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.560261+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..e2427fdf0245ff --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_ENHANCED_spring_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.574753+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_dartlang_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap new file mode 100644 index 00000000000000..b76da28f1efc30 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_dartlang_sdk.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T13:12:19.588381+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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 stack trace 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@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap new file mode 100644 index 00000000000000..58841a7edb44e9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_clojure_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.602076+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap new file mode 100644 index 00000000000000..1cde306e243cd3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_enhancer_by_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.615872+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap new file mode 100644 index 00000000000000..1c3168a9dd525f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_extra_ENHANCED_spring_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.630518+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap new file mode 100644 index 00000000000000..1fb01c072c7914 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_from_url_origin_corner_cases.pysnap @@ -0,0 +1,58 @@ +--- +created: '2025-11-04T13:12:19.644671+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap new file mode 100644 index 00000000000000..c4dc63fbc15e3d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_abs_path_is_http.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.659357+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_filename_if_blob.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap new file mode 100644 index 00000000000000..c1fef417d41e44 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_blob.pysnap @@ -0,0 +1,29 @@ +--- +created: '2025-11-04T13:12:19.674191+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_filename_if_http.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap new file mode 100644 index 00000000000000..4c25a66ba34a2c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_http.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T13:12:19.689127+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_filename_if_https.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap new file mode 100644 index 00000000000000..8938d0fb504850 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_filename_if_https.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T13:12:19.702321+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap new file mode 100644 index 00000000000000..aea99902897da5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_flutter_sdk.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T13:12:19.716217+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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@2025_with_threads/frame_ignores_hibernate_classes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap new file mode 100644 index 00000000000000..2e83dd5d4fa0c3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_hibernate_classes.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.730102+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_java8_lambda_function.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap new file mode 100644 index 00000000000000..788e173d876a69 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_function.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.744290+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_java8_lambda_module.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap new file mode 100644 index 00000000000000..2897cadf41a4a7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_java8_lambda_module.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.758080+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_javassist.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap new file mode 100644 index 00000000000000..c514b1d921d821 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.799247+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_javassist_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap new file mode 100644 index 00000000000000..779ff5096fb486 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_2.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.772433+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_javassist_3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap new file mode 100644 index 00000000000000..1892f91c1e2f48 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_javassist_3.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.785973+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_module_if_page_url.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap new file mode 100644 index 00000000000000..4c565f955f9b24 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T13:12:19.827252+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: null + contributing component: null + hint: None + root_component: + app + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + module* + "foo/bar/baz" + filename (ignored because frame points to a URL) + "foo.py" +-------------------------------------------------------------------------- +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) + module* + "foo/bar/baz" + filename (ignored because frame points to a URL) + "foo.py" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap new file mode 100644 index 00000000000000..7ac202c93aa572 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_module_if_page_url_2.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T13:12:19.813102+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 bad javascript module) + "foo/bar/baz" + filename (ignored because frame points to a URL) + "foo.py" + function* + "a" +-------------------------------------------------------------------------- +system: + hash: "0cc175b9c0f1b6a831c399e269772661" + contributing component: stacktrace + hint: None + root_component: + system* + stacktrace* + frame* + module (ignored bad javascript module) + "foo/bar/baz" + filename (ignored because frame points to a URL) + "foo.py" + function* + "a" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap new file mode 100644 index 00000000000000..a79e6ca6da4337 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_safari_native_code.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.841480+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap new file mode 100644 index 00000000000000..de40696f9ddf51 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_packages.pysnap @@ -0,0 +1,93 @@ +--- +created: '2025-11-04T13:12:19.855922+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace rule (path:package:sentry_logging/** -app)) + filename* + "sentry_logging.dart" + function* + "SentryLogging.log" + frame (marked out of app by stack trace rule (path:package:sentry_dio/** -app)) + filename* + "sentry_dio.dart" + function* + "SentryDio.dio" + frame (marked out of app by stack trace rule (path:package:sentry_file/** -app)) + filename* + "sentry_file.dart" + function* + "SentryFile.file" + frame (marked out of app by stack trace rule (path:package:sentry_hive/** -app)) + filename* + "sentry_hive.dart" + function* + "SentryHive.hive" + frame (marked out of app by stack trace rule (path:package:sentry_isar/** -app)) + filename* + "sentry_isar.dart" + function* + "SentryIsar.isar" + frame (marked out of app by stack trace rule (path:package:sentry_sqflite/** -app)) + filename* + "sentry_sqflite.dart" + function* + "SentrySqflite.sqflite" + frame (marked out of app by stack trace 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 stack trace rule (path:package:sentry_logging/** -group)) + filename* + "sentry_logging.dart" + function* + "SentryLogging.log" + frame (ignored by stack trace rule (path:package:sentry_dio/** -group)) + filename* + "sentry_dio.dart" + function* + "SentryDio.dio" + frame (ignored by stack trace rule (path:package:sentry_file/** -group)) + filename* + "sentry_file.dart" + function* + "SentryFile.file" + frame (ignored by stack trace rule (path:package:sentry_hive/** -group)) + filename* + "sentry_hive.dart" + function* + "SentryHive.hive" + frame (ignored by stack trace rule (path:package:sentry_isar/** -group)) + filename* + "sentry_isar.dart" + function* + "SentryIsar.isar" + frame (ignored by stack trace rule (path:package:sentry_sqflite/** -group)) + filename* + "sentry_sqflite.dart" + function* + "SentrySqflite.sqflite" + frame (ignored by stack trace rule (path:package:sentry_drift/** -group)) + filename* + "sentry_drift.dart" + function* + "SentryDrift.drift" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap new file mode 100644 index 00000000000000..67af77d4b0323f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_dart_sdk.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T13:12:19.869879+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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 stack trace rule (path:package:sentry/** -group)) + filename* + "sentry_exception_factory.dart" + function* + "SentryExceptionFactory.getSentryException" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap new file mode 100644 index 00000000000000..e5f7bb9f3853b1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sentry_flutter_sdk.pysnap @@ -0,0 +1,33 @@ +--- +created: '2025-11-04T13:12:19.883804+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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 stack trace 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@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap new file mode 100644 index 00000000000000..7947837290da47 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.910537+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap new file mode 100644 index 00000000000000..8e824a314a5098 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_constructors_2.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.897004+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace 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@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap new file mode 100644 index 00000000000000..f3ed91c52549ee --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_ignores_sun_java_generated_methods.pysnap @@ -0,0 +1,40 @@ +--- +created: '2025-11-04T13:12:19.924138+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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 stack trace rule (category:framework -app)) + module* (removed reflection marker) + "sun.reflect.GeneratedMethodAccessor" + function* + "invoke" + frame (marked out of app by stack trace 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@2025_with_threads/frame_sanitizes_block_functions.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap new file mode 100644 index 00000000000000..0f4f62bc4f99eb --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_block_functions.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.937652+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_sanitizes_erb_templates.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap new file mode 100644 index 00000000000000..2d752c10a96cb4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_erb_templates.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:19.951087+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap new file mode 100644 index 00000000000000..33ed35dd37eb8f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames.pysnap @@ -0,0 +1,26 @@ +--- +created: '2025-11-04T13:12:19.977997+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap new file mode 100644 index 00000000000000..15f49087444a3a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_sanitizes_versioned_filenames_2.pysnap @@ -0,0 +1,26 @@ +--- +created: '2025-11-04T13:12:19.964717+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_uses_context_line_over_function.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap new file mode 100644 index 00000000000000..62f89ef7529283 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_context_line_over_function.pysnap @@ -0,0 +1,34 @@ +--- +created: '2025-11-04T13:12:19.991703+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_uses_module_over_filename.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap new file mode 100644 index 00000000000000..08eee660535db5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_uses_module_over_filename.pysnap @@ -0,0 +1,30 @@ +--- +created: '2025-11-04T13:12:20.004711+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/frame_with_only_required_vars.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap new file mode 100644 index 00000000000000..e0a6be7cd8243c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/frame_with_only_required_vars.pysnap @@ -0,0 +1,26 @@ +--- +created: '2025-11-04T13:12:20.017954+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/go_pkg_mod.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap new file mode 100644 index 00000000000000..c4fe40055dbb35 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/go_pkg_mod.pysnap @@ -0,0 +1,58 @@ +--- +created: '2025-11-04T13:12:20.033419+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4b8bbc500bd2cabfcadc1f1be867e0bb" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by stack trace 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" + type* + "*pq.Error" + value (ignored because stacktrace takes precedence) + "pq: cannot cast jsonb null to type integer" +-------------------------------------------------------------------------- +system: + hash: "348fc4026c9fa11ffba8fbfa80a134c9" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "*pq.Error" + value (ignored because stacktrace takes precedence) + "pq: cannot cast jsonb null to type integer" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_125_event_126.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_125_event_126.pysnap new file mode 100644 index 00000000000000..ad0a07047db467 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_125_event_126.pysnap @@ -0,0 +1,286 @@ +--- +created: '2025-11-04T13:12:20.051587+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by stack trace rule (family:native function:std::* -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 (non app frame) + function* + "_CFBundleLoadExecutableAndReturnError" + frame (non app frame) + function* + "_CFBundleDlfcnLoadBundle" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen_internal" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dyld::link" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoader::link" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoader::recursiveRebase" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoaderMachOCompressed::rebase" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / 0x00000032" + value* (stripped event-specific values) + "Fatal Error: EXC_BAD_ACCESS / " +-------------------------------------------------------------------------- +system: + hash: "3da34e8c72dbcd4a490ac36eb7130638" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + function* + "CFBundleGetFunctionPointerForName" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_CFBundleLoadExecutableAndReturnError" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_CFBundleDlfcnLoadBundle" + frame* + function* + "dlopen" + frame (ignored by stack trace rule (category:internals -group)) + function* + "dlopen_internal" + frame (ignored by stack trace rule (category:internals -group)) + function* + "dyld::link" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoader::link" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoader::recursiveRebase" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoaderMachOCompressed::rebase" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / 0x00000032" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXC_BAD_ACCESS / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_200_event_200.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_200_event_200.pysnap new file mode 100644 index 00000000000000..fda868a9afa4a1 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_200_event_200.pysnap @@ -0,0 +1,174 @@ +--- +created: '2025-11-04T13:12:20.069679+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 stack trace rule (category:system -app)) + function* + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + frame (non app frame) + function* + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + frame (non app frame) + function* + "WEBIO_REQUEST::OnIoComplete" + frame (non app frame) + function* + "HTTP_USER_REQUEST::OnSendRequest" + frame (non app frame) + 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 (non app frame) + function* + "memset" + frame (non app frame) + function* + "RtlpFreeUserBlock" + frame (non app frame) + function* + "RtlpFreeUserBlockToHeap" + frame (non app frame) + function* + "RtlFreeHeap" + frame (non app frame) + function* + "RtlpFreeHeapInternal" + frame (non app frame) + function* + "RtlpFreeHeap" + frame (non app frame) + function* + "RtlEnterCriticalSection" + frame (non app frame) + function* + "RtlpEnterCriticalSectionContended" + frame (non app frame) + function* + "RtlpWaitOnCriticalSection" + frame (non app frame) + function* + "RtlpWaitOnAddress" + frame (non app frame) + function* + "RtlpOptimizeWaitOnAddressWaitList" + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" +-------------------------------------------------------------------------- +system: + hash: "ca733a48a19d237df8577d09449095d9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "TppWorkpExecuteCallback" + frame* + function* + "HTTP_THREAD_POOL::_StaticWorkItemCallback" + frame (ignored by stack trace rule (category:internals -group)) + function* + "HTTP_ASYNC_OVERLAPPED::OnWorkItem" + frame (ignored by stack trace rule (category:internals -group)) + function* + "WEBIO_REQUEST::OnIoComplete" + frame (ignored by stack trace rule (category:internals -group)) + function* + "HTTP_USER_REQUEST::OnSendRequest" + frame (ignored by stack trace rule (category:internals -group)) + function* + "HTTP_BASE_OBJECT::Dereference" + frame* + function* + "destructor'" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "HTTP_USER_REQUEST::~HTTP_USER_REQUEST" + frame* + function* + "destructor'" + frame* + function* + "RtlFreeHeap" + frame (ignored by stack trace rule (category:internals -group)) + function* + "memset" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpFreeUserBlock" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpFreeUserBlockToHeap" + frame* + function* + "RtlFreeHeap" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpFreeHeapInternal" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpFreeHeap" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlEnterCriticalSection" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpEnterCriticalSectionContended" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpWaitOnCriticalSection" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpWaitOnAddress" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RtlpOptimizeWaitOnAddressWaitList" + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_275_event_275.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_275_event_275.pysnap new file mode 100644 index 00000000000000..8b4953c04a6420 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_275_event_275.pysnap @@ -0,0 +1,206 @@ +--- +created: '2025-11-04T13:12:20.088308+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_root_queues_init_once" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_worker_thread2" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_root_queue_drain" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -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 (non app frame) + function* + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" +-------------------------------------------------------------------------- +system: + hash: "2c1bbd635b64d5adccdb64a620044075" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_dispatch_root_queues_init_once" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_wqthread" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_dispatch_worker_thread2" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_root_queue_drain" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace rule (category:internals -group)) + function* + "_INTERNAL34b3029b::`anonymous namespace'::Convert4444_8uTo4444_32f" + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_289_event_312.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_289_event_312.pysnap new file mode 100644 index 00000000000000..3d8e67bbcc9509 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_289_event_312.pysnap @@ -0,0 +1,190 @@ +--- +created: '2025-11-04T13:12:20.106206+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native 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 (non app frame) + function* + "gleUnbindDeleteHashNamesAndObjects" + frame (non app frame) + function* + "gleUnbindTextureObject" + frame (non app frame) + function* + "gldUpdateDispatch" + frame (non app frame) + function* + "gldUpdateDispatch" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gldCreateDevice" + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "9c336f632f6764c0f082a6a66edbf22d" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "thread.cpp" + function* + "boost::thread::start_thread_noexcept" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "thread.cpp" + function* + "boost::`anonymous namespace'::thread_proxy" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "gleUnbindDeleteHashNamesAndObjects" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gleUnbindTextureObject" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gldUpdateDispatch" + frame (ignored due to recursion) + function* + "gldUpdateDispatch" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gpusSubmitDataBuffers" + frame* + function* + "gldCreateDevice" + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_294.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_294.pysnap new file mode 100644 index 00000000000000..d1739b8ab81609 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_294.pysnap @@ -0,0 +1,288 @@ +--- +created: '2025-11-04T13:12:20.124621+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -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 stack trace rule (family:native function:std::* -app)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "map" + function* + "std::__1::map::~map" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (marked out of app by stack trace rule (family:native function:std::* -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 stack trace rule (family:native function:std::* -app)) + function* + "std::__1::thread::~thread" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::terminate" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::__terminate" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "default_terminate_handler" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort_message" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "49b6f72b6635cb43190c57ee56b026b0" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "map" + function* + "std::__1::map::~map" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame* + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "std::__1::thread::~thread" + frame* + function* + "std::terminate" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "std::__terminate" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "default_terminate_handler" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort_message" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__abort" + frame + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_329.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_329.pysnap new file mode 100644 index 00000000000000..2ecdc1ee382ae6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_294_event_329.pysnap @@ -0,0 +1,318 @@ +--- +created: '2025-11-04T13:12:20.143122+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_root_queues_init_once" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_wqthread" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_worker_thread2" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_dispatch_root_queue_drain" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -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 stack trace rule (family:native function:std::* -app)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "map" + function* + "std::__1::map::~map" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::~__tree" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__tree" + function* + "std::__1::__tree::destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (marked out of app by stack trace rule (family:native function:std::* -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 stack trace rule (family:native function:std::* -app)) + function* + "std::terminate" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::__terminate" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "demangling_terminate_handler" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort_message" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "49b6f72b6635cb43190c57ee56b026b0" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_dispatch_root_queues_init_once" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start_wqthread" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_wqthread" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_dispatch_worker_thread2" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_dispatch_root_queue_drain" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::map::~map" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "map" + function* + "std::__1::map::~map" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (category:internals -group)) + filename* + "memory" + function* + "std::__1::allocator_traits::__destroy" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "mac" + function* + "std::__1::pair::~pair" + frame (ignored by stack trace 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* + function* + "std::terminate" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "std::__terminate" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "demangling_terminate_handler" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort_message" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_307.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_307.pysnap new file mode 100644 index 00000000000000..4e781b4dc30d34 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_307.pysnap @@ -0,0 +1,126 @@ +--- +created: '2025-11-04T13:12:20.159647+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__dynamic_cast" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value* + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + function* + "__dynamic_cast" + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_657.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_657.pysnap new file mode 100644 index 00000000000000..ee9e7c1591dce7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_307_event_657.pysnap @@ -0,0 +1,116 @@ +--- +created: '2025-11-04T13:12:20.178507+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native package:/usr/lib/** -app)) + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / EXC_I386_GPFLT" + value* + "Fatal Error: EXC_BAD_ACCESS / EXC_I386_GPFLT" +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_313.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_313.pysnap new file mode 100644 index 00000000000000..918d03c0b98216 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_313.pysnap @@ -0,0 +1,384 @@ +--- +created: '2025-11-04T13:12:20.201249+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by stack trace rule (family:native function:std::* -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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_objc_msgSend_uncached" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "lookUpImpOrForward" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "initializeAndMaybeRelock" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "initializeNonMetaClass" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen_internal" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__report_load" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__report_load.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "8be5979a334287a1b47457228f1d4612" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "_objc_msgSend_uncached" + frame (ignored by stack trace rule (category:internals -group)) + function* + "lookUpImpOrForward" + frame (ignored by stack trace rule (category:internals -group)) + function* + "initializeAndMaybeRelock" + frame (ignored by stack trace rule (category:internals -group)) + function* + "initializeNonMetaClass" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (category:internals -group)) + function* + "__report_load" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "__report_load.cold.1" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_333.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_333.pysnap new file mode 100644 index 00000000000000..ee17e3593dbf9e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_313_event_333.pysnap @@ -0,0 +1,394 @@ +--- +created: '2025-11-04T13:12:20.222073+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (marked out of app by stack trace rule (family:native function:std::* -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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_objc_msgSend_uncached" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "lookUpImpOrForward" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "initializeAndMaybeRelock" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "initializeNonMetaClass" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dlopen_internal" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "dyld::runInitializers" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoader::runInitializers" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoader::processInitializers" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoader::recursiveInitialization" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoaderMachO::doInitialization" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "ImageLoaderMachO::doModInitFunctions" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__report_load" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "8be5979a334287a1b47457228f1d4612" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::function::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__value_func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__func::operator()" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::__1::__function::__alloc_func::operator()" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "__functional_base" + function* + "std::__1::__invoke_void_return_wrapper::__call" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "type_traits" + function* + "std::__1::__invoke" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "_objc_msgSend_uncached" + frame (ignored by stack trace rule (category:internals -group)) + function* + "lookUpImpOrForward" + frame (ignored by stack trace rule (category:internals -group)) + function* + "initializeAndMaybeRelock" + frame (ignored by stack trace rule (category:internals -group)) + function* + "initializeNonMetaClass" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "dlopen_internal" + frame (ignored by stack trace rule (category:internals -group)) + function* + "dyld::runInitializers" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoader::runInitializers" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoader::processInitializers" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoader::recursiveInitialization" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoaderMachO::doInitialization" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ImageLoaderMachO::doModInitFunctions" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__report_load" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_319_event_321.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_319_event_321.pysnap new file mode 100644 index 00000000000000..e69a4bf770923d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_319_event_321.pysnap @@ -0,0 +1,390 @@ +--- +created: '2025-11-04T13:12:20.242185+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (category:system -app)) + function* + "-[NSApplication run]" + frame (non app frame) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (non app frame) + function* + "_DPSNextEvent" + frame (non app frame) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (non app frame) + function* + "ReceiveNextEventCommon" + frame (non app frame) + function* + "RunCurrentEventLoopInMode" + frame (non app frame) + function* + "CFRunLoopRunSpecific" + frame (non app frame) + function* + "__CFRunLoopRun" + frame (non app frame) + function* + "__CFRunLoopDoSources0" + frame (non app frame) + function* + "__CFRunLoopDoSource0" + frame (non app frame) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (non app frame) + function* + "__NSThreadPerformPerform" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by stack trace rule (category:system -app)) + function* + "-[NSView displayIfNeeded]" + frame (non app frame) + 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 (non app frame) + function* + "glSwap_Exec" + frame (non app frame) + function* + "gldPresentFramebufferData" + frame (non app frame) + function* + "SwapFlush" + frame (non app frame) + function* + "intelSubmitCommands" + frame (non app frame) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gpusKillClientExt" + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_sigtramp" + 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* + "NSRunAlertPanel" + frame (non app frame) + function* + "_NSTryRunModal" + frame (non app frame) + function* + "CA::Transaction::commit" + frame (non app frame) + function* + "CA::Context::commit_transaction" + frame (non app frame) + function* + "CA::Layer::display_if_needed" + frame (non app frame) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "stripped_application_code" + frame (non app frame) + function* + "CGLTexImageIOSurface2D" + frame (non app frame) + function* + "CGLDescribeRenderer" + frame (non app frame) + function* + "gliSetInteger" + frame (non app frame) + function* + "gldFlushObject" + frame (non app frame) + function* + "intelSubmitCommands" + frame (non app frame) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gpusKillClientExt" + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "7e64037e487c78ce0439f750a2ef503f" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_DPSNextEvent" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ReceiveNextEventCommon" + frame (ignored by stack trace rule (category:internals -group)) + function* + "RunCurrentEventLoopInMode" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__NSThreadPerformPerform" + frame* + function* + "stripped_application_code" + frame* + function* + "-[NSView displayIfNeeded]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "-[NSOpenGLContext flushBuffer]" + frame* + function* + "CGLFlushDrawable" + frame (ignored by stack trace rule (category:internals -group)) + function* + "glSwap_Exec" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gldPresentFramebufferData" + frame (ignored by stack trace rule (category:internals -group)) + function* + "SwapFlush" + frame (ignored by stack trace rule (category:internals -group)) + function* + "intelSubmitCommands" + frame (ignored by stack trace rule (category:internals -group)) + function* + "IntelCommandBuffer::getNew" + frame* + function* + "gpusSubmitDataBuffers" + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusKillClientExt" + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "_sigtramp" + frame (ignored by stack trace rule (category:throw ^-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 stack trace rule (category:throw ^-group)) + function* + "NSRunAlertPanel" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "_NSTryRunModal" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Transaction::commit" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Context::commit_transaction" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Layer::display_if_needed" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "stripped_application_code" + frame (ignored due to recursion) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CGLTexImageIOSurface2D" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CGLDescribeRenderer" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gliSetInteger" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gldFlushObject" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "intelSubmitCommands" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "IntelCommandBuffer::getNew" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusSubmitDataBuffers" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusKillClientExt" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_389_event_389.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_389_event_389.pysnap new file mode 100644 index 00000000000000..737f288711d0d6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_389_event_389.pysnap @@ -0,0 +1,90 @@ +--- +created: '2025-11-04T13:12:20.258470+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "stripped_application_code" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_testcancel" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" +-------------------------------------------------------------------------- +system: + hash: "aeed765d29d1a60cb094f66d2cd8efb2" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "_pthread_testcancel" + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_432.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_432.pysnap new file mode 100644 index 00000000000000..b925e0d9aa2fce --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_432.pysnap @@ -0,0 +1,258 @@ +--- +created: '2025-11-04T13:12:20.275954+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 (non app frame) + function* + "abort" + frame (non app frame) + function* + "raise" + frame (non app frame) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "6148c73af04344a8597354711f5951ea" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace 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* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "raise" + frame (ignored by stack trace rule (category:throw ^-group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_453.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_453.pysnap new file mode 100644 index 00000000000000..6c8ddc1f12b07a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_432_event_453.pysnap @@ -0,0 +1,258 @@ +--- +created: '2025-11-04T13:12:20.294625+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 stack trace rule (family:native function:std::* -app)) + filename* + "xtree" + function* + "std::_Tree::insert" + frame (marked out of app by stack trace rule (family:native function:std::* -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 (non app frame) + function* + "abort" + frame (non app frame) + function* + "raise" + frame (non app frame) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "1056f62d72ff8b4d0c3842d696dbb10a" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "TppWorkerThread" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:internals -group)) + filename* + "xtree" + function* + "std::_Tree::insert" + frame (ignored by stack trace 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 stack trace 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* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "raise" + frame (ignored by stack trace rule (category:throw ^-group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_445_event_445.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_445_event_445.pysnap new file mode 100644 index 00000000000000..265105b8038db6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/group_445_event_445.pysnap @@ -0,0 +1,300 @@ +--- +created: '2025-11-04T13:12:20.312654+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 stack trace rule (family:native function:std::* -app)) + filename* + "xstring" + function* + "std::basic_string::{ctor}" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + filename* + "xstring" + function* + "std::basic_string::assign" + frame (marked out of app by stack trace rule (family:native function:std::* -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 stack trace 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 stack trace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (non app frame) + 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 (non app frame) + function* + "abort" + frame (non app frame) + function* + "raise" + frame (non app frame) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "15526a7b64e9b5dc6d89e7ebec864260" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "winmain.cpp" + function* + "wWinMain" + frame* + filename* + "xstring" + function* + "std::basic_string::{ctor}" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (category:indirection -group)) + filename* + "functional" + function* + "std::_Func_class::operator()" + frame* + function* + "stripped_application_code" + frame* + function* + "DispatchMessageWorker" + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace rule (category:indirection -group)) + filename* + "function_template.hpp" + function* + "boost::function0::operator()" + frame* + function* + "stripped_application_code" + frame (ignored by stack trace 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 stack trace rule (category:indirection -group)) + filename* + "purevirt.cpp" + function* + "_purecall" + frame (ignored by stack trace rule (category:internals -group)) + function* + "abort" + frame* + function* + "raise" + frame (ignored by stack trace rule (category:throw ^-group)) + filename* + "crashpad_client_win.cc" + function* + "crashpad::`anonymous namespace'::HandleAbortSignal" + type (ignored because exception is synthetic) + "0x40000015 / 0x00000001" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hpkp.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hpkp.pysnap new file mode 100644 index 00000000000000..aab92d679e49e4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hpkp.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:20.326178+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +default: + hash: "1e37a374cb33572622d02ff7a6237c44" + contributing component: hpkp + hint: None + root_component: + default* + hpkp* + salt* (a static salt) + "hpkp" + hostname* + "example.com" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap new file mode 100644 index 00000000000000..4c85ad9bc19dfe --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_base.pysnap @@ -0,0 +1,18 @@ +--- +created: '2025-11-04T13:12:20.341341+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "e3d593b4335190212ca7c18b8e967fb1" + 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@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap new file mode 100644 index 00000000000000..f1e96cb52f4dbd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_custom_client_hybrid_server.pysnap @@ -0,0 +1,340 @@ +--- +created: '2025-11-04T13:12:20.357425+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "19163f3ca34f5995c69d85351ce3d697" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + values: ["{{ default }}","soft-timelimit-exceeded"] +-------------------------------------------------------------------------- +system: + hash: "847950eb44d280e6758d136c763d6ddc" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" + values: ["{{ default }}","soft-timelimit-exceeded"] diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap new file mode 100644 index 00000000000000..f79e95799b06b2 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_hybrid_client_custom_server.pysnap @@ -0,0 +1,341 @@ +--- +created: '2025-11-04T13:12:20.373541+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" +-------------------------------------------------------------------------- +custom_fingerprint: + hash: "554e214208f0372603dc9fa6c1c0965f" + 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* + 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()" + type* + "SoftTimeLimitExceeded" + value (ignored because stacktrace takes precedence) + "SoftTimeLimitExceeded()" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap new file mode 100644 index 00000000000000..cf121e0aa59289 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_default_different_extra.pysnap @@ -0,0 +1,18 @@ +--- +created: '2025-11-04T13:12:20.388364+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "5b5ad5a0fbb4deb5e3fc631ce42681ae" + 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@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap new file mode 100644 index 00000000000000..93269fc0fbb148 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/hybrid_fingerprint_same_extra_different_default.pysnap @@ -0,0 +1,18 @@ +--- +created: '2025-11-04T13:12:20.403259+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "c5578778212497f1ff3435405e2a4a98" + 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@2025_with_threads/in_app_in_ui.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap new file mode 100644 index 00000000000000..0c15cde13c657e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/in_app_in_ui.pysnap @@ -0,0 +1,298 @@ +--- +created: '2025-11-04T13:12:20.421737+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "5b032559156688c9eabe4e4bd5ae6bd4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by the client) + function* + "start" + frame (marked in-app by the client but ignored by stack trace 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 in-app by the client but ignored by stack trace rule (category:internals -group)) + 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 in-app by the client but ignored by stack trace rule (category:internals -group)) + 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" + type (ignored because exception is synthetic) + "EXC_BREAKPOINT" + value (ignored because stacktrace takes precedence) + "autoplayOption" +-------------------------------------------------------------------------- +system: + hash: "1921b991270e24c19ea1ed6863892d71" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "main.m" + function* + "main" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "UIApplicationMain" + frame* + function* + "-[UIApplication _run]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "GSEventRunModal" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoObservers" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CA::Transaction::observer_callback" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CA::Transaction::commit" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CA::Context::commit_transaction" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CA::Layer::layout_and_display_if_needed" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CA::Layer::layout_if_needed" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[CALayer layoutSublayers]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UIView(CALayerDelegate) layoutSublayersOfLayer:]" + frame* + filename* + "" + function* + "TableView.layoutSubviews" + frame* + function* + "-[UITableView layoutSubviews]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[UITableView _updateVisibleCellsNow:]" + frame (ignored by stack trace 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 stack trace 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 stack trace 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" + type (ignored because exception is synthetic) + "EXC_BREAKPOINT" + value (ignored because stacktrace takes precedence) + "autoplayOption" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_chained.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_chained.pysnap new file mode 100644 index 00000000000000..de292f5cbe84a8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_chained.pysnap @@ -0,0 +1,793 @@ +--- +created: '2025-11-04T13:12:20.443048+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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* + 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" + type* + "BindException" + value* + "Address already in use" + exception* + 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" + type* + "LifecycleException" + value* + "service.getName(): \"Tomcat\"; Protocol handler start failed" + exception* + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace 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" + type* + "LifecycleException" + value* (stripped event-specific values) + "Failed to start component [Connector[HTTP/]]" +-------------------------------------------------------------------------- +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: "1959b227a7cf6acf7f3fd401b5d9f09b" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + stacktrace* + frame (ignored by stack trace 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" + type* + "BindException" + value (ignored because stacktrace takes precedence) + "Address already in use" + exception* + stacktrace* + frame (ignored by stack trace 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" + type* + "LifecycleException" + value (ignored because stacktrace takes precedence) + "service.getName(): \"Tomcat\"; Protocol handler start failed" + exception* + stacktrace* + frame (ignored by stack trace 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" + type* + "LifecycleException" + value (ignored because stacktrace takes precedence) + "Failed to start component [Connector[HTTP/]]" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_minimal.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_minimal.pysnap new file mode 100644 index 00000000000000..a80223091f093c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/java_minimal.pysnap @@ -0,0 +1,809 @@ +--- +created: '2025-11-04T13:12:20.463205+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "ArithmeticException" + value* + "/ by zero" +-------------------------------------------------------------------------- +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: "ef2555bf7958ada8eefafbfdaed1c409" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + module* + "java.lang.Thread" + filename (ignored because module takes precedence) + "thread.java" + function* + "run" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace rule (module:io.sentry.* -group)) + module* + "io.sentry.example.Application" + filename (ignored because module takes precedence) + "application.java" + function* + "home" + type* + "ArithmeticException" + value (ignored because stacktrace takes precedence) + "/ by zero" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap new file mode 100644 index 00000000000000..635b1a3ec098e4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:20.492415+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap new file mode 100644 index 00000000000000..55d5757f2ad774 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_fallback_to_message_whistles.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:20.477969+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/javascript_exception_no_in_app.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap new file mode 100644 index 00000000000000..80807e2c3b9a74 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_exception_no_in_app.pysnap @@ -0,0 +1,150 @@ +--- +created: '2025-11-04T13:12:20.508029+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "ReferenceError" + value* + "varant is not defined" +-------------------------------------------------------------------------- +system: + hash: "c0f3f7d6deb17aec9d07259ac684fad0" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "ReferenceError" + value (ignored because stacktrace takes precedence) + "varant is not defined" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message.pysnap new file mode 100644 index 00000000000000..390c6d9fd10972 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.536764+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +default: + hash: "4119639092e62c55ea8be348e4d9260d" + contributing component: message + hint: None + root_component: + default* + message* + "event" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap new file mode 100644 index 00000000000000..ca2163293409aa --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_message_parameterization.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.522505+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/javascript_polyfills.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap new file mode 100644 index 00000000000000..b2e05fdad43825 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_polyfills.pysnap @@ -0,0 +1,60 @@ +--- +created: '2025-11-04T13:12:20.552072+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (module:@babel/** -app)) + module* + "@babel/runtime/helpers/asyncToGenerator" + function (ignored unknown function name) + "" + frame (marked out of app by stack trace rule (module:core-js/** -app)) + module* + "core-js/internals/task" + function* + "listener" + frame (marked out of app by stack trace rule (module:tslib/** -app)) + module* + "tslib/tslib.es6" + function* (trimmed javascript function) + "sent" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +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) + stacktrace (ignored because it contains no contributing frames) + frame (ignored by stack trace rule (module:@babel/** -group)) + module* + "@babel/runtime/helpers/asyncToGenerator" + function (ignored unknown function name) + "" + frame (ignored by stack trace rule (module:core-js/** -group)) + module* + "core-js/internals/task" + function* + "listener" + frame (ignored by stack trace rule (module:tslib/** -group)) + module* + "tslib/tslib.es6" + function* (trimmed javascript function) + "sent" + type* + "Error" + value* + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap new file mode 100644 index 00000000000000..5d23e1d1056a35 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_unpkg.pysnap @@ -0,0 +1,74 @@ +--- +created: '2025-11-04T13:12:20.567896+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace 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 stack trace 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 stack trace 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 stack trace rule (path:**https://esm.run/** -app)) + filename (ignored because frame points to a URL) + "d3@7.6.1" + function* (trimmed javascript function) + "run" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "6ab78545e13144405fb21dadb9045b91" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap new file mode 100644 index 00000000000000..43dd915caa5b65 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_chrome.pysnap @@ -0,0 +1,122 @@ +--- +created: '2025-11-04T13:12:20.584652+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap new file mode 100644 index 00000000000000..6b53f62bab7471 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_edge.pysnap @@ -0,0 +1,130 @@ +--- +created: '2025-11-04T13:12:20.600773+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap new file mode 100644 index 00000000000000..68d1e5c484deb7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_firefox.pysnap @@ -0,0 +1,116 @@ +--- +created: '2025-11-04T13:12:20.616430+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap new file mode 100644 index 00000000000000..da63debbeaf643 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_chrome.pysnap @@ -0,0 +1,158 @@ +--- +created: '2025-11-04T13:12:20.632778+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap new file mode 100644 index 00000000000000..01eef99aee198c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_edge.pysnap @@ -0,0 +1,166 @@ +--- +created: '2025-11-04T13:12:20.649632+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap new file mode 100644 index 00000000000000..fe5f0c9b5efadf --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_firefox.pysnap @@ -0,0 +1,152 @@ +--- +created: '2025-11-04T13:12:20.665531+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap new file mode 100644 index 00000000000000..995d4e9637fad3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_http_safari.pysnap @@ -0,0 +1,164 @@ +--- +created: '2025-11-04T13:12:20.681799+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "b2602ad455472dede8e4c340d8a7eaba" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap new file mode 100644 index 00000000000000..845bac41239faf --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_safari.pysnap @@ -0,0 +1,132 @@ +--- +created: '2025-11-04T13:12:20.698209+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +system: + hash: "c63e8727af1a8fe75872b6a762797113" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap new file mode 100644 index 00000000000000..235ef8515369eb --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_firefox.pysnap @@ -0,0 +1,354 @@ +--- +created: '2025-11-04T13:12:20.717825+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4a3cf3893b6485428dd02da116c8370e" + contributing component: exception + hint: None + root_component: + app* + exception* + 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();" + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " +-------------------------------------------------------------------------- +system: + hash: "d5456487ea8dccfe96c1968b19870978" + contributing component: exception + hint: None + root_component: + system* + exception* + 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();" + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap new file mode 100644 index 00000000000000..594d4fbf56d4ee --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/javascript_xbrowser_sentryui_safari.pysnap @@ -0,0 +1,292 @@ +--- +created: '2025-11-04T13:12:20.736270+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4a3cf3893b6485428dd02da116c8370e" + contributing component: exception + hint: None + root_component: + app* + exception* + 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();" + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " +-------------------------------------------------------------------------- +system: + hash: "0b81da6ea3d7cc82b1d4825b7aac0b8d" + contributing component: exception + hint: None + root_component: + system* + exception* + 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();" + type* + "NotFoundError" + value (ignored because stacktrace takes precedence) + "GET /issues//events/latest/ " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel.pysnap new file mode 100644 index 00000000000000..b7972aaaafadb3 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel.pysnap @@ -0,0 +1,726 @@ +--- +created: '2025-11-04T13:12:20.771625+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4665d486184740231357ab63f4543a8d" + contributing component: exception + hint: None + root_component: + app* + 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 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');" + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" +-------------------------------------------------------------------------- +system: + hash: "107ed03036d901157372f260bc3df446" + contributing component: exception + hint: None + root_component: + system* + 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');" + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap new file mode 100644 index 00000000000000..54ad83d74b5e1c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/laravel_anonymous.pysnap @@ -0,0 +1,68 @@ +--- +created: '2025-11-04T13:12:20.752353+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "a728cdf5d62c8e017c35c3fe04051b6e" + contributing component: exception + hint: None + root_component: + app* + exception* + 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)" + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" +-------------------------------------------------------------------------- +system: + hash: "63c67781779781d9b0a442a5b2bdb976" + contributing component: exception + hint: None + root_component: + system* + 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)" + type* + "Exception" + value (ignored because stacktrace takes precedence) + "LARAVEL TEST" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap new file mode 100644 index 00000000000000..447eb4d3798836 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_prefers_message.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.786437+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/logentry_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap new file mode 100644 index 00000000000000..3979aa9a37f127 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/logentry_uses_formatted.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.800855+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/macos_amd_driver.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap new file mode 100644 index 00000000000000..1b5e2369e54e3d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_amd_driver.pysnap @@ -0,0 +1,316 @@ +--- +created: '2025-11-04T13:12:20.818997+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (category:system -app)) + function* + "-[NSRunLoop(NSRunLoop) runMode:beforeDate:]" + frame (non app frame) + function* + "CFRunLoopRunSpecific" + frame (non app frame) + function* + "__CFRunLoopRun" + frame (non app frame) + function* + "__CFRunLoopDoSources0" + frame (non app frame) + function* + "__CFRunLoopDoSource0" + frame (non app frame) + 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 (non app frame) + function* + "glTexSubImage2D_Exec" + frame (non app frame) + function* + "gleTextureImagePut" + frame (non app frame) + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "b8baf791d22ac902d5f59a7eedd844fd" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "CFRunLoopRunSpecific" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopRun" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSources0" + frame (ignored by stack trace rule (category:internals -group)) + function* + "__CFRunLoopDoSource0" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "glTexSubImage2D_Exec" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gleTextureImagePut" + frame + frame (ignored by stack trace rule (category:internals -group)) + function* + "gpusSubmitDataBuffers" + frame + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap new file mode 100644 index 00000000000000..e067ac8ac96d8e --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/macos_intel_driver.pysnap @@ -0,0 +1,372 @@ +--- +created: '2025-11-04T13:12:20.839808+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "start" + frame (marked out of app by stack trace rule (family:native 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 stack trace rule (category:system -app)) + function* + "-[NSApplication run]" + frame (non app frame) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (non app frame) + function* + "_DPSNextEvent" + frame (non app frame) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (non app frame) + function* + "ReceiveNextEventCommon" + frame (non app frame) + function* + "RunCurrentEventLoopInMode" + frame (non app frame) + frame (non app frame) + frame (non app frame) + frame (non app frame) + frame (non app frame) + frame (non app frame) + function* + "__NSThreadPerformPerform" + frame (non app frame) + function* + "code" + frame (marked out of app by stack trace rule (category:system -app)) + function* + "-[NSView displayIfNeeded]" + frame (non app frame) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "CGLTexImageIOSurface2D" + frame (non app frame) + function* + "CGLDescribeRenderer" + frame (non app frame) + function* + "gliSetInteger" + frame (non app frame) + function* + "gldFlushObject" + frame (non app frame) + function* + "intelSubmitCommands" + frame (non app frame) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gpusKillClientExt" + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (non app frame) + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_sigtramp" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "NSRunAlertPanel" + frame (non app frame) + function* + "_NSTryRunModal" + frame (non app frame) + function* + "CA::Transaction::commit" + frame (non app frame) + function* + "CA::Context::commit_transaction" + frame (non app frame) + function* + "CA::Layer::display_if_needed" + frame (non app frame) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "code" + frame (non app frame) + function* + "CGLTexImageIOSurface2D" + frame (non app frame) + function* + "CGLDescribeRenderer" + frame (non app frame) + function* + "gliSetInteger" + frame (non app frame) + function* + "gldFlushObject" + frame (non app frame) + function* + "intelSubmitCommands" + frame (non app frame) + function* + "IntelCommandBuffer::getNew" + frame (non app frame) + function* + "gpusSubmitDataBuffers" + frame (non app frame) + function* + "gpusKillClientExt" + frame (non app frame) + function* + "gpusGenerateCrashLog" + frame (non app frame) + function* + "gpusGenerateCrashLog.cold.1" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "abort" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value* (stripped event-specific values) + "Fatal Error: / " +-------------------------------------------------------------------------- +system: + hash: "36be6e0b6123ef6ecfbef62f5cb88406" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_DPSNextEvent" + frame (ignored by stack trace rule (category:internals -group)) + function* + "_BlockUntilNextEventMatchingListInModeWithFilter" + frame (ignored by stack trace rule (category:internals -group)) + function* + "ReceiveNextEventCommon" + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "__NSThreadPerformPerform" + frame* + function* + "code" + frame* + function* + "-[NSView displayIfNeeded]" + frame (ignored by stack trace rule (category:internals -group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame* + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame* + function* + "CGLTexImageIOSurface2D" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CGLDescribeRenderer" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gliSetInteger" + frame (ignored by stack trace rule (category:internals -group)) + function* + "gldFlushObject" + frame (ignored by stack trace rule (category:internals -group)) + function* + "intelSubmitCommands" + frame (ignored by stack trace rule (category:internals -group)) + function* + "IntelCommandBuffer::getNew" + frame* + function* + "gpusSubmitDataBuffers" + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusKillClientExt" + frame (ignored by stack trace rule (category:telemetry -group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "gpusGenerateCrashLog.cold.1" + frame* + function* + "abort" + frame + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "_sigtramp" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "NSRunAlertPanel" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "_NSTryRunModal" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Transaction::commit" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Context::commit_transaction" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CA::Layer::display_if_needed" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "-[_NSOpenGLViewBackingLayer display]" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "code" + frame (ignored due to recursion) + function* + "code" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CGLTexImageIOSurface2D" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "CGLDescribeRenderer" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gliSetInteger" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gldFlushObject" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "intelSubmitCommands" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "IntelCommandBuffer::getNew" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusSubmitDataBuffers" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusKillClientExt" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusGenerateCrashLog" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "gpusGenerateCrashLog.cold.1" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type (ignored because exception is synthetic) + "0x00000000 / 0x00000000" + value (ignored because stacktrace takes precedence) + "Fatal Error: / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap new file mode 100644 index 00000000000000..0392065dc1b27a --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/malloc_sentinel.pysnap @@ -0,0 +1,198 @@ +--- +created: '2025-11-04T13:12:20.857918+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type* + "SIGABRT" + value* + "" +-------------------------------------------------------------------------- +system: + hash: "70b7b816193e06eb5d6649989fbaf605" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace rule (category:internals -group)) + function* + "std::__1::basic_string::~basic_string" + frame* + function* + "free" + frame* + function* + "malloc_report" + frame (ignored by stack trace rule (category:internals -group)) + function* + "malloc_vreport" + frame* + function* + "abort" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "pthread_kill" + frame (ignored by stack trace rule (category:throw ^-group)) + function* + "__pthread_kill" + type* + "SIGABRT" + value (ignored because stacktrace takes precedence) + "" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_prefers_message.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_prefers_message.pysnap new file mode 100644 index 00000000000000..0fd0ab6e43faba --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_prefers_message.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.873088+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/message_uses_formatted.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap new file mode 100644 index 00000000000000..49d8e314e7dc60 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_uses_formatted.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.887943+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/message_with_key_pair_values.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap new file mode 100644 index 00000000000000..001f53b56338fc --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/message_with_key_pair_values.pysnap @@ -0,0 +1,13 @@ +--- +created: '2025-11-04T13:12:20.902680+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +default: + hash: "d2ab1028e9cb44352a824e878951f412" + 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@2025_with_threads/minified_javascript.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/minified_javascript.pysnap new file mode 100644 index 00000000000000..07eca3b3b8a56d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/minified_javascript.pysnap @@ -0,0 +1,422 @@ +--- +created: '2025-11-04T13:12:20.920484+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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()" + type (ignored because exception is synthetic) + "log_demo" + value* + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +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" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "::operator()" + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash1.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash1.pysnap new file mode 100644 index 00000000000000..ba284fdf8f0c96 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash1.pysnap @@ -0,0 +1,68 @@ +--- +created: '2025-11-04T13:12:20.953269+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" +-------------------------------------------------------------------------- +system: + hash: "2e0d26cae5986fcda5edf66612a78268" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame* + function* + "destructor'" + frame* + function* + "CD3D11LayeredChild::LUCBeginLayerDestruction" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by stack trace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (ignored by stack trace rule (category:internals -group)) + function* + "OpenAdapter10" + frame + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap new file mode 100644 index 00000000000000..7a8092c64cbff8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash2.pysnap @@ -0,0 +1,58 @@ +--- +created: '2025-11-04T13:12:20.968843+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" +-------------------------------------------------------------------------- +system: + hash: "c85e23e804b52ea4b9f290ba838e77a0" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "CUseCountedObject::UCDestroy" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by stack trace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame (ignored by stack trace rule (category:internals -group)) + function* + "OpenAdapter10" + frame + frame (ignored due to recursion) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap new file mode 100644 index 00000000000000..dbbb73af0d7957 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_driver_crash3.pysnap @@ -0,0 +1,70 @@ +--- +created: '2025-11-04T13:12:20.985408+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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) + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" +-------------------------------------------------------------------------- +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" + frame (ignored by stack trace rule (category:internals -group)) + function* + "CContext::LUCBeginLayerDestruction" + frame (ignored by stack trace rule (category:internals -group)) + function* + "NDXGI::CDevice::DestroyDriverInstance" + frame + frame (ignored by stack trace rule (category:internals -group)) + function* + "OpenAdapter12" + frame + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_READ" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_READ" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_limit_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_limit_frames.pysnap new file mode 100644 index 00000000000000..95691706b65271 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_limit_frames.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T13:12:21.001710+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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()" + type (ignored because exception is synthetic) + "log_demo" + value* + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +system: + hash: "8f4c7709e4af98d3c47ce3519690e6d9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored because only 1 frame is considered by stack trace rule (family:native max-frames=1)) + function* + "Scaleform::GFx::IME::GImeNamesManagerVista::OnActivated" + frame* + function* + "Scaleform::GFx::AS3::IMEManager::DispatchEvent" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "::operator()" + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap new file mode 100644 index 00000000000000..e588b1ebe0b0c6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_malloc_chain.pysnap @@ -0,0 +1,66 @@ +--- +created: '2025-11-04T13:12:21.019344+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type (ignored because exception is synthetic) + "EXC_BAD_INSTRUCTION / EXC_I386_INVOP" + value* + "Fatal Error: EXC_BAD_INSTRUCTION / EXC_I386_INVOP" +-------------------------------------------------------------------------- +system: + hash: "3ff01ce959249abecc6bc8a8f1432b0b" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "application_frame" + frame* + function* + "malloc_zone_malloc" + frame (ignored by stack trace rule (category:internals -group)) + function* + "nanov2_malloc" + frame (ignored by stack trace rule (category:internals -group)) + function* + "nanov2_allocate" + frame (ignored by stack trace rule (category:internals -group)) + function* + "nanov2_allocate_from_block" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "nanov2_allocate_from_block.cold.1" + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_no_filenames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_no_filenames.pysnap new file mode 100644 index 00000000000000..ecd32a784f2db4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_no_filenames.pysnap @@ -0,0 +1,114 @@ +--- +created: '2025-11-04T13:12:21.037611+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "418120a66f7031923031f5c52aca0724" + contributing component: exception + hint: None + root_component: + app* + exception* + 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) + "" + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +system: + hash: "bbcdb2e1d8df09ffe0fffd30fb361d4b" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start" + frame (ignored by stack trace 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 stack trace 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) + "" + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap new file mode 100644 index 00000000000000..910f94d7a86e24 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_unlimited_frames.pysnap @@ -0,0 +1,48 @@ +--- +created: '2025-11-04T13:12:21.055483+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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()" + type (ignored because exception is synthetic) + "log_demo" + value* + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +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" + frame (ignored by stack trace rule (category:indirection -group)) + function* + "::operator()" + type (ignored because exception is synthetic) + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap new file mode 100644 index 00000000000000..d7c47e5105b8fd --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_windows_anon_namespace.pysnap @@ -0,0 +1,80 @@ +--- +created: '2025-11-04T13:12:21.072317+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value* + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" +-------------------------------------------------------------------------- +system: + hash: "46b84e4da51648cc9f9741abd2bdad51" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by stack trace 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" + type (ignored because exception is synthetic) + "EXCEPTION_ACCESS_VIOLATION_WRITE" + value (ignored because stacktrace takes precedence) + "Fatal Error: EXCEPTION_ACCESS_VIOLATION_WRITE" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_with_function_name.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_with_function_name.pysnap new file mode 100644 index 00000000000000..60d3e0c99e7a8d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/native_with_function_name.pysnap @@ -0,0 +1,71 @@ +--- +created: '2025-11-04T13:12:21.091114+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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" + type (ignored because exception is synthetic) + "EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + value* + "Fatal Error: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS" + threads (ignored because thread has no stacktrace) +-------------------------------------------------------------------------- +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" + 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" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_exception_weird.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_exception_weird.pysnap new file mode 100644 index 00000000000000..01307a8df70696 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_exception_weird.pysnap @@ -0,0 +1,202 @@ +--- +created: '2025-11-04T13:12:21.108313+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "a20509269752c9a1bea6078851e4d39c" + contributing component: exception + hint: None + root_component: + app* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bla" +-------------------------------------------------------------------------- +system: + hash: "252dc79eb5653bf822e2684d90734cb8" + contributing component: exception + hint: None + root_component: + system* + exception* + 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" + type* + "Error" + value (ignored because stacktrace takes precedence) + "bla" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_low_level_async.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_low_level_async.pysnap new file mode 100644 index 00000000000000..ff4f09abf9759f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/node_low_level_async.pysnap @@ -0,0 +1,54 @@ +--- +created: '2025-11-04T13:12:21.126835+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "be36642f41f047346396f018f62375d3" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by stack trace rule (function:processTicksAndRejections -app)) + module* + "task_queues" + filename (ignored because module takes precedence) + "task_queues" + function* + "processTicksAndRejections" + frame (marked out of app by stack trace rule (function:runMicrotasks -app)) + filename* + "axiosinterceptor.js" + function* + "runMicrotasks" + type* + "Error" + value* + "bad" +-------------------------------------------------------------------------- +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) + stacktrace (ignored because it contains no contributing frames) + frame (ignored by stack trace rule (function:processTicksAndRejections -group)) + module* + "task_queues" + filename (ignored because module takes precedence) + "task_queues" + function* + "processTicksAndRejections" + frame (ignored by stack trace rule (function:runMicrotasks -group)) + filename* + "axiosinterceptor.js" + function* + "runMicrotasks" + type* + "Error" + value* + "bad" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_exception_base.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_exception_base.pysnap new file mode 100644 index 00000000000000..71cd3838fecc92 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_exception_base.pysnap @@ -0,0 +1,56 @@ +--- +created: '2025-11-04T13:12:21.145506+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "c52ebcc2d9d0780a23c7d99831678830" + contributing component: chained_exception + hint: None + root_component: + app* + chained_exception* + exception* + stacktrace* + frame* (marked in-app by the client) + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + exception* + stacktrace (ignored because it contains no in-app frames) + frame (marked out of app by the client) + filename* + "baz.py" + type* + "ValueError" + value* + "hello world" +-------------------------------------------------------------------------- +system: + hash: "669cb6664e0f5fed38665da04e464f7e" + contributing component: chained_exception + hint: None + root_component: + system* + chained_exception* + exception* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" + exception* + stacktrace* + frame* + filename* + "baz.py" + type* + "ValueError" + value (ignored because stacktrace takes precedence) + "hello world" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap new file mode 100644 index 00000000000000..101f1ea7fe0a6d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_away_from_crash.pysnap @@ -0,0 +1,210 @@ +--- +created: '2025-11-04T13:12:21.163837+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "121caa876de75ec51bf72ed4c852cd75" + contributing component: exception + hint: None + root_component: + app* + exception* + 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 stack trace 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))" + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" +-------------------------------------------------------------------------- +system: + hash: "a5af2577d4caca8f983657c5d1919e14" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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))" + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap new file mode 100644 index 00000000000000..257492aa42a5f8 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_grouping_enhancer_towards_crash.pysnap @@ -0,0 +1,210 @@ +--- +created: '2025-11-04T13:12:21.182306+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + 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 stack trace 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 stack trace 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 stack trace 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))" + type* + "MultiValueDictKeyError" + value* + "\"'user'\"" +-------------------------------------------------------------------------- +system: + hash: "90888e813b09fa25061af2883c0fb9bd" + contributing component: exception + hint: None + root_component: + system* + exception* + 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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))" + type* + "MultiValueDictKeyError" + value (ignored because stacktrace takes precedence) + "\"'user'\"" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_http_error.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_http_error.pysnap new file mode 100644 index 00000000000000..e8a9f288cde6f4 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/python_http_error.pysnap @@ -0,0 +1,93 @@ +--- +created: '2025-11-04T13:12:21.201007+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "d59239f5aad3304d60beb1fde3369b78" + contributing component: exception + hint: None + root_component: + app* + exception* + 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)" + type* + "HTTPError" + value (ignored because stacktrace takes precedence) + " Client Error: Too Many Requests for url: " +-------------------------------------------------------------------------- +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: "133db3f366b1327dab4e661f66dfb961" + contributing component: exception + hint: None + root_component: + system* + exception* + 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)" + type* + "HTTPError" + value (ignored because stacktrace takes precedence) + " Client Error: Too Many Requests for url: " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap new file mode 100644 index 00000000000000..81686ed5a8b981 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:21.252151+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/react_concurrent_rendering_no_cause.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap new file mode 100644 index 00000000000000..96eef430a8939d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_cause.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:21.218032+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap new file mode 100644 index 00000000000000..daa8bfefcd6221 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_concurrent_rendering_no_mechanism.pysnap @@ -0,0 +1,22 @@ +--- +created: '2025-11-04T13:12:21.235340+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/react_native.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_native.pysnap new file mode 100644 index 00000000000000..590f1665d40eae --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/react_native.pysnap @@ -0,0 +1,414 @@ +--- +created: '2025-11-04T13:12:21.271960+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "73470e545e51eea9cff8a6c006f68f57" + contributing component: exception + hint: None + root_component: + app* + exception* + 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@2025_with_threads/stacktrace_hash_without_system_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap new file mode 100644 index 00000000000000..a94f1545bcd842 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_hash_without_system_frames.pysnap @@ -0,0 +1,32 @@ +--- +created: '2025-11-04T13:12:21.401052+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap new file mode 100644 index 00000000000000..752c29379d2b6d --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_ignores_singular_anonymous_frame.pysnap @@ -0,0 +1,46 @@ +--- +created: '2025-11-04T13:12:21.415086+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/stacktrace_negated_match.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap new file mode 100644 index 00000000000000..c29b8057a65a48 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_negated_match.pysnap @@ -0,0 +1,72 @@ +--- +created: '2025-11-04T13:12:21.431066+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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) + stacktrace (ignored because it contains no in-app frames) + frame (non app frame) + function* + "_main" + frame (marked out of app by stack trace 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 stack trace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start::{{closure}}" + frame (non app frame) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" + type* + "log_demo" + value* + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +system: + hash: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (!function:log_demo::* -group)) + function* + "_main" + frame (ignored by stack trace rule (!function:log_demo::* -group)) + function* + "std::rt::lang_start_internal" + frame (ignored by stack trace rule (!function:log_demo::* -group)) + function* + "___rust_maybe_catch_panic" + frame (ignored by stack trace rule (!function:log_demo::* -group)) + function* + "std::panicking::try::do_call" + frame (ignored by stack trace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame (ignored by stack trace rule (!function:log_demo::* -group)) + function* + "log::__private_api_log" + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap new file mode 100644 index 00000000000000..2c63dc257894ca --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust.pysnap @@ -0,0 +1,72 @@ +--- +created: '2025-11-04T13:12:21.447230+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (non app frame) + function* + "_main" + frame (marked out of app by stack trace 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 stack trace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start::{{closure}}" + frame* (marked in-app by stack trace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +system: + hash: "cb57cfc73cc622c2ac1386c9ea531fb9" + contributing component: exception + hint: None + root_component: + system* + exception* + 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 stack trace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame* + function* + "log::__private_api_log" + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap new file mode 100644 index 00000000000000..3a4d3b8d4b418f --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_rust2.pysnap @@ -0,0 +1,72 @@ +--- +created: '2025-11-04T13:12:21.464294+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "eb87c1031dba55b67df86fb9fff59dc6" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (non app frame) + function* + "_main" + frame (marked out of app by stack trace 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 stack trace rule (family:native function:std::* -app)) + function* + "std::panicking::try::do_call" + frame (marked out of app by stack trace rule (family:native function:std::* -app)) + function* + "std::rt::lang_start::{{closure}}" + frame* (marked in-app by stack trace rule (family:native function:log_demo::* +app)) + function* + "log_demo::main" + frame (non app frame) + function* + "log::__private_api_log" + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" +-------------------------------------------------------------------------- +system: + hash: "0817e4e604fbe88c4534eff166df1db9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame* + function* + "_main" + frame* + function* + "std::rt::lang_start_internal" + frame (ignored by stack trace rule (family:native function:__* -group)) + function* + "___rust_maybe_catch_panic" + frame* + function* + "std::panicking::try::do_call" + frame (ignored by stack trace rule (category:internals -group)) + function* + "std::rt::lang_start::{{closure}}" + frame* + function* + "log_demo::main" + frame (ignored by stack trace rule (family:native function:*::__* -group)) + function* + "log::__private_api_log" + type* + "log_demo" + value (ignored because stacktrace takes precedence) + "Holy shit everything is on fire!" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap new file mode 100644 index 00000000000000..bbf9a5784b02a9 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/stacktrace_with_minimal_app_frames.pysnap @@ -0,0 +1,92 @@ +--- +created: '2025-11-04T13:12:21.479078+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/template_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap new file mode 100644 index 00000000000000..8880e404d6d4a5 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/template_compute_hashes.pysnap @@ -0,0 +1,16 @@ +--- +created: '2025-11-04T13:12:21.494119+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/threads_compute_hashes.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap new file mode 100644 index 00000000000000..fb03225de3d7c7 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_compute_hashes.pysnap @@ -0,0 +1,32 @@ +--- +created: '2025-11-04T13:12:21.508623+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "6f2033bfef1d2e512e337df0fdcb0cbf" + 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@2025_with_threads/threads_no_hash.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_no_hash.pysnap new file mode 100644 index 00000000000000..14b7fa4086c6c6 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/threads_no_hash.pysnap @@ -0,0 +1,15 @@ +--- +created: '2025-11-04T13:12:21.522231+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +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@2025_with_threads/unity.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unity.pysnap new file mode 100644 index 00000000000000..f426642311ef58 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unity.pysnap @@ -0,0 +1,110 @@ +--- +created: '2025-11-04T13:12:21.538811+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "a12d579fed7636c2a5d2fae110c95ce5" + contributing component: exception + hint: None + root_component: + app* + exception* + 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 ()" + type* + "NullReferenceException" + value (ignored because stacktrace takes precedence) + "Object reference not set to an instance of an object" +-------------------------------------------------------------------------- +system: + hash: "c0dbeebf0430b3310ad1f7ceb48553a6" + contributing component: exception + hint: None + root_component: + system* + exception* + 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 ()" + type* + "NullReferenceException" + value (ignored because stacktrace takes precedence) + "Object reference not set to an instance of an object" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap new file mode 100644 index 00000000000000..2e8c19fb7f3018 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assert_mac.pysnap @@ -0,0 +1,222 @@ +--- +created: '2025-11-04T13:12:21.556548+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "ecb890e5cd60dec2b626d500cc866de4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "__NSThread__start__" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FGenericPlatformMisc::RaiseException" + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "p__commonOp__fn__fn__makeReturn__fn__1823_fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." +-------------------------------------------------------------------------- +system: + hash: "57493ac3e558feffb778cf170a7fd986" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace 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 stack trace 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" + type* + "EXC_BAD_ACCESS" + value (ignored because stacktrace takes precedence) + "p__commonOp__fn__fn__makeReturn__fn__1823_fn__done > XTUM >\nKERN_INVALID_ADDRESS at ." diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap new file mode 100644 index 00000000000000..a987882edce25c --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_android.pysnap @@ -0,0 +1,166 @@ +--- +created: '2025-11-04T13:12:21.573090+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "8c134ce2a43a0b2c55654902491307c2" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "__start_thread" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + function* + "__pthread_start" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "android_main" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AndroidMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UGameEngine::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UWorld::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::ProcessLatentActions" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FLatentActionManager::TickLatentActionForObject" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "AActor::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + frame (marked out of app by stack trace rule (category:system -app)) + function* + "tgkill" + type (ignored because exception is synthetic) + "SIGTRAP" + value (ignored because stacktrace takes precedence) + "Trap" +-------------------------------------------------------------------------- +system: + hash: "f203e9bc12df86bb01fbd92a45643f86" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "__start_thread" + frame (ignored by stack trace 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" + type (ignored because exception is synthetic) + "SIGTRAP" + value (ignored because stacktrace takes precedence) + "Trap" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..79e5fc319ed679 --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_assertion_check_fail_on_windows.pysnap @@ -0,0 +1,308 @@ +--- +created: '2025-11-04T13:12:21.592162+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "c246c95d4a435b3d601044aebae72a38" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame (marked out of app by stack trace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UserCallWinProcCheckWow" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::CheckVerifyFailedImpl2" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FDebug::AssertFailed" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FOutputDevice::LogfImpl" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + filename* + "sentryoutputdeviceerror.cpp" + function* + "FSentryOutputDeviceError::Serialize" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "FWindowsErrorOutputDevice::Serialize" + frame (marked out of app by stack trace rule (family:native function:FDebug::CheckVerifyFailedImpl* v+app -app ^-app)) + function* + "RaiseException" + type (ignored because exception is synthetic) + "unknown 0x00004000 / 0x7ff89574837a" + value (ignored because stacktrace takes precedence) + "Fatal Error: unknown / " +-------------------------------------------------------------------------- +system: + hash: "d0669f63f03ddaec66ac8b9f4e3e449d" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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* + function* + "RaiseException" + type (ignored because exception is synthetic) + "unknown 0x00004000 / 0x7ff89574837a" + value (ignored because stacktrace takes precedence) + "Fatal Error: unknown / " diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap new file mode 100644 index 00000000000000..450d00ce3211bb --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_mac.pysnap @@ -0,0 +1,526 @@ +--- +created: '2025-11-04T13:12:21.613093+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "e7a1be23aff9a117598bb893ed4bedb4" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "__NSThread__start__" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + 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: ]" + threads (ignored because app/system exception takes precedence) + stacktrace* + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "__NSThread__start__" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored due to recursion) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegateBase::Broadcast" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient captureException:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" +-------------------------------------------------------------------------- +system: + hash: "1bba3ace796a07d167af26959c6039c9" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" + 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: ]" + threads (ignored because app/system exception takes precedence) + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient captureException:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap new file mode 100644 index 00000000000000..0a3a8e87aa882b --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_ensure_check_fail_on_windows.pysnap @@ -0,0 +1,366 @@ +--- +created: '2025-11-04T13:12:21.632432+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "4717aeb08ff642726ef6ea8f1ce55cdf" + contributing component: exception + hint: None + root_component: + app* + exception* + stacktrace* + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "invoke_main" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "WinMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "LaunchWindowsStartup" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMainWrapper" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsPlatformApplicationMisc::PumpMessages" + frame (marked out of app by stack trace rule (category:system -app)) + function* + "DispatchMessageWorker" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UserCallWinProcCheckWow" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::AppWndProc" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::DeferMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FWindowsApplication::ProcessDeferredMessage" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SharedPointerInternals::NewIntrusiveReferenceController" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "`TArray::Remove'::`2'::::operator()" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TBaseUObjectMethodDelegateInstance::Execute" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::ProcessInternal" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "`TThreadSingleton::Get'::`2'::::operator()" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UObject::execCallMathFunction" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.gen.cpp" + function* + "USentryPlaygroundUtils::execTerminate" + frame* (marked in-app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentryplaygroundutils.cpp" + function* + "USentryPlaygroundUtils::Terminate" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "UE::Assert::Private::ExecCheckImplInternal" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "CheckVerifyImpl" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::OptionallyLogFormattedEnsureMessageReturningFalseImpl" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "FDebug::EnsureFailed" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "TMulticastDelegate::Broadcast" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "delegateinstancesimpl.h" + function* + "TBaseFunctorDelegateInstance::ExecuteIfSafe" + frame (marked out of app by stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "invoke.h" + function* + "Invoke" + frame (marked out of app by stack trace 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 stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + filename* + "sentrysubsystemdesktop.cpp" + function* + "SentrySubsystemDesktop::CaptureEnsure" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_value_set_stacktrace" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_value_new_stacktrace" + frame (marked out of app by stack trace rule (family:native function:UE::Assert::Private::ExecCheckImplInternal* v+app -app ^-app)) + function* + "sentry_unwind_stack_from_ucontext" + 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: ]" +-------------------------------------------------------------------------- +system: + hash: "65244b22630821cacd0be603ebcef671" + contributing component: exception + hint: None + root_component: + system* + exception* + stacktrace* + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "RtlUserThreadStart" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "BaseThreadInitThunk" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + filename* + "exe_common.inl" + function* + "__scrt_common_main_seh" + frame (ignored by stack trace 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 stack trace 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 stack trace 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 stack trace 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 stack trace 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" + 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: ]" diff --git a/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap new file mode 100644 index 00000000000000..a671d73394beff --- /dev/null +++ b/tests/sentry/grouping/snapshots/variants/test_variants/newstyle@2025_with_threads/unreal_event_capture_mac.pysnap @@ -0,0 +1,277 @@ +--- +created: '2025-11-04T13:12:21.650408+00:00' +creator: sentry +source: tests/sentry/grouping/test_variants.py +--- +app: + hash: "54e8028fb2526cf31b12dd66c01ad9e2" + contributing component: threads + hint: None + root_component: + app* + threads* + stacktrace* + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "thread_start" + frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app)) + function* + "_pthread_start" + frame (marked out of app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "__NSThread__start__" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[FCocoaGameThread main]" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "-[UEAppDelegate runGameThread:]" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "GuardedMain" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FEngineLoop::Tick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::Tick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::TickPlatform" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessDeferredEvents" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FMacApplication::ProcessMouseUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::OnMouseUp" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::ProcessMouseButtonUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "FSlateApplication::RoutePointerUpEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::OnMouseButtonUp" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SButton::ExecuteOnClick" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UButton::SlateHandleClicked" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "TMulticastScriptDelegate::ProcessMulticastDelegate" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessEvent" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalFunction" + frame (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app) but ignored by stack trace rule (category:indirection -group)) + function* + "ProcessLocalFunction::lambda::operator()" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "ProcessLocalScriptFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::execLetObj" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::ProcessContextOpcode" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UObject::CallFunction" + frame* (marked in-app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "UFunction::Invoke" + frame (marked out of app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::execCaptureEventWithScope" + frame (marked out of app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::CaptureEventWithScope" + frame (marked out of app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "USentrySubsystem::CaptureEventWithScope" + frame (marked out of app by stack trace rule (family:native function:USentrySubsystem::*execCapture* v+app -app ^-app)) + function* + "SentrySubsystemApple::CaptureEventWithScope" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureEvent:withScopeBlock:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "+[SentrySDK captureEvent:withScope:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (marked out of app by stack trace rule (family:native function:?[[]Sentry* -app)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (marked out of app by stack trace 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 stack trace rule (category:threadbase -group v-group)) + function* + "thread_start" + frame (ignored by stack trace rule (category:threadbase -group v-group)) + function* + "_pthread_start" + frame (ignored by stack trace 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 stack trace 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 stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureEvent:withScopeBlock:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "+[SentrySDK captureEvent:withScope:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryHub captureEvent:withScope:additionalEnvelopeItems:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient sendEvent:withScope:alwaysAttachStacktrace:isCrashEvent:additionalEnvelopeItems:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryClient prepareEvent:withScope:alwaysAttachStacktrace:isCrashEvent:]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryThreadInspector getCurrentThreads]" + frame (ignored by stack trace rule (family:native function:?[[]Sentry* -group)) + function* + "-[SentryStacktraceBuilder buildStacktraceForCurrentThread]" diff --git a/tests/sentry/grouping/test_strategies.py b/tests/sentry/grouping/test_strategies.py index ea438ad5a72e41..93c32ac26a908e 100644 --- a/tests/sentry/grouping/test_strategies.py +++ b/tests/sentry/grouping/test_strategies.py @@ -2,7 +2,7 @@ import pytest -from sentry.grouping.api import load_grouping_config +from sentry.grouping.api import _get_default_base64_enhancements, load_grouping_config from sentry.grouping.component import ( StacktraceGroupingComponent, ThreadNameGroupingComponent, @@ -356,8 +356,9 @@ def test_thread_name_grouping_enabled(self) -> None: ) # With thread name grouping enabled + config_id = "newstyle:2025-with-threads" config_with_threads = load_grouping_config( - {"id": "newstyle:2025-with-threads", "enhancements": None} + {"id": config_id, "enhancements": _get_default_base64_enhancements(config_id)} ) variants_main = event_main_thread.get_grouping_variants(force_config=config_with_threads) @@ -417,7 +418,10 @@ def test_thread_name_grouping_disabled(self) -> None: ) # Default config without thread grouping - config_default = load_grouping_config({"id": "newstyle:2023-01-11", "enhancements": None}) + config_id = "newstyle:2023-01-11" + config_default = load_grouping_config( + {"id": config_id, "enhancements": _get_default_base64_enhancements(config_id)} + ) variants_main = event_main_thread.get_grouping_variants(force_config=config_default) variants_worker = event_worker_thread.get_grouping_variants(force_config=config_default) @@ -442,10 +446,16 @@ def test_thread_metadata_component_structure(self) -> None: self.project, ) - config = load_grouping_config({"id": "newstyle:2025-with-threads", "enhancements": None}) + config_id = "newstyle:2025-with-threads" + config = load_grouping_config( + {"id": config_id, "enhancements": _get_default_base64_enhancements(config_id)} + ) variants = event.get_grouping_variants(force_config=config) - threads_component = variants["app"].contributing_component + app_variant = variants["app"] + # Type assertion for mypy - we know it's a ComponentVariant + assert hasattr(app_variant, "contributing_component") + threads_component = app_variant.contributing_component # type: ignore[attr-defined] # The contributing component should be a ThreadsGroupingComponent assert isinstance(threads_component, ThreadsGroupingComponent) From 2c2dda7f282dc36489399d5cf48142255fc96709 Mon Sep 17 00:00:00 2001 From: mujacica Date: Tue, 4 Nov 2025 14:58:54 +0100 Subject: [PATCH 7/7] Fix mypy error --- tests/sentry/grouping/test_strategies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/sentry/grouping/test_strategies.py b/tests/sentry/grouping/test_strategies.py index 93c32ac26a908e..99d71f0831a04d 100644 --- a/tests/sentry/grouping/test_strategies.py +++ b/tests/sentry/grouping/test_strategies.py @@ -455,7 +455,7 @@ def test_thread_metadata_component_structure(self) -> None: app_variant = variants["app"] # Type assertion for mypy - we know it's a ComponentVariant assert hasattr(app_variant, "contributing_component") - threads_component = app_variant.contributing_component # type: ignore[attr-defined] + threads_component = app_variant.contributing_component # The contributing component should be a ThreadsGroupingComponent assert isinstance(threads_component, ThreadsGroupingComponent)