feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks - #6103

Merged
antonis merged 2 commits into
mainfrom
antonis/issue-6096
May 7, 2026
Merged

feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks#6103
antonis merged 2 commits into
mainfrom
antonis/issue-6096

Conversation

@antonis

@antonisantonis commented May 6, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Extends getLabelValue in touchevents.tsx to read accessibilityLabel, aria-label, and testID from memoizedProps as fallback labels for touch breadcrumbs.

Priority chain:sentry-label > custom labelKey > accessibilityLabel > aria-label > testID

Previously, the only way to get a meaningful label on a touch breadcrumb was to explicitly set sentry-label on the component — which almost nobody does. Now any app that uses accessibility labels or testIDs gets meaningful breadcrumbs out of the box.

Before:

Touch event within element: TouchableOpacity (button.tsx)

After (if accessibilityLabel is set):

Touch event within element: Save workout

This also improves Session Replay AI summaries, which rely on breadcrumb data to describe user actions.

Note on PII:accessibilityLabel and aria-label can carry dynamic content (e.g., accessibilityLabel={`Delete ${item.name}`}), so user data may appear in breadcrumbs via this path. This is consistent with existing behavior for sentry-label, which can also be dynamic.

💡 Motivation and Context

Closes#6096

Customer feedback indicated that Session Replay summaries are not useful because tap breadcrumbs only show generic component hierarchies (TouchableOpacity > Animated(View) > View > ExpoLinearGradient) with no meaningful labels. On web, the SDK captures button text and element attributes; on mobile, we were only reading the four Babel-injected props and explicit sentry-label.

💚 How did you test it?

  • Added 7 unit tests covering:
    • accessibilityLabel used as fallback
    • testID used as fallback
    • aria-label used as fallback
    • sentry-label takes priority over all
    • Custom labelName takes priority over accessibilityLabel
    • accessibilityLabel takes priority over aria-label and testID
    • accessibilityLabel takes priority over testID
  • All existing tests pass unchanged
  • Lint passes

📝 Checklist

🔮 Next steps

…readcrumb label fallbacks
Closes#6096
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • feat(core): Use accessibilityLabel, aria-label, and testID as touch breadcrumb label fallbacks by antonis in #6103
  • build(core): Add public API surface tracking with api-extractor by antonis in #6093
  • chore(deps): bump axios from 1.15.0 to 1.16.0 by dependabot in #6091
  • ci: Add workflow to notify issues when fix is released by antonis in #6089
  • ci: Add Danger check to warn about auth token handling changes by antonis in #6087
  • Fix PNPM iOS Upload Debug Symbol fail in EAS Build by alwx in #6086
  • chore(deps): update Sentry Android Gradle Plugin to v6.6.0 by github-actions in #6085
  • fix(e2e): Remove flaky iOS replay assertion from captureReplay test by antonis in #6072
  • chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 by dependabot in #6078
  • fix: Prevent shell injection vulnerability in GitHub Actions workflow by fix-it-felix-sentry in #6077
  • chore(deps): update Maestro to v2.5.1 by github-actions in #6075

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actionsBot commented May 6, 2026

Copy link
Copy Markdown
Contributor
Fails
🚫Pull request is not ready for merge, please add the "ready-to-merge" label to the pull request
Messages
📖Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 95575f3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
alwx
alwx approved these changes May 7, 2026
@antonis
antonis merged commit a736b76 into mainMay 7, 2026
61 of 67 checks passed
@antonis
antonis deleted the antonis/issue-6096 branch May 7, 2026 11:02
antonis added a commit to getsentry/sentry-docs that referenced this pull request May 7, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
sentrivana pushed a commit to getsentry/sentry-docs that referenced this pull request May 18, 2026
## DESCRIBE YOUR PR
Updates React Native touch event docs to reflect that
`accessibilityLabel`, `aria-label`, and `testID` are now automatically
used as label fallbacks for touch breadcrumbs (added in
[getsentry/sentry-react-native#6103](getsentry/sentry-react-native#6103)).
**Changes:**
- **`touchevents.mdx`**: Rewrote the "Tracking Specific Components"
section to correctly distinguish between the **label** fallback chain
(`sentry-label` > `labelName` > `accessibilityLabel` > `aria-label` >
`testID`) and the **name** field (Babel annotation / `displayName`).
Updated `labelName` option description.
- **`user-interaction-instrumentation.mdx`**: Updated the label
identification description to mention the full fallback chain.
## IS YOUR CHANGE URGENT?
- [ ] Urgent deadline (GA date, etc.)
- [ ] Other deadline
- [x] None: Not urgent, can wait up to 1 week+
⚠️ Should be merged after
getsentry/sentry-react-native#6103 is released
## PRE-MERGE CHECKLIST
- [ ] Checked Vercel preview for correctness, including links
- [ ] PR was reviewed and approved by any necessary SMEs (subject matter
experts)
- [ ] PR was reviewed and approved by a member of the [Sentry docs
team](https://github.com/orgs/getsentry/teams/docs)
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Read accessibilityLabel and testID from touch event props

2 participants

@antonis@alwx