Skip to content

[NO QA] Filter high-volume Sentry spans: browser resources, Google Ads/Analytics, and Ping - #101464

Merged
rlinoz merged 5 commits into
mainfrom
claude-reduceSentrySpanVolume
Sep 18, 2026
Merged

rlinoz merged 5 commits into
mainfrom
claude-reduceSentrySpanVolume

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Explanation of Change

A Sentry health check found that a handful of auto-instrumented span sources dominated our tracing volume (~820M spans over 30 days) while offering little debugging value. This PR filters three of them, which map to items 1, 3 and 4 of the linked issue. Item 2 (OnyxDerivedCompute) is deliberately out of scope — it is our own instrumentation and needs a duration threshold rather than a filter, so it is better handled in its own PR.

  1. Browser resource spans (~222M). browserTracingIntegration now passes ignoreResourceSpans: ['resource.link', 'resource.script'], so the SDK never creates a span per stylesheet/font or per script on pageload and navigation. Web vitals (LCP, FCP, CLS, INP) are unaffected because they are measurements on the pageload span rather than resource spans. The trade-off worth knowing: these spans are what feeds Sentry's Insights → Assets module for CSS/JS, so that module loses data for those two types.
  2. Google Ads/Analytics conversion requests (~80M+). ccm/collect, rmkt/collect, pagead/form-data and ccm/form-data are added to the existing shouldCreateSpanForRequest filter. These are third-party requests we cannot act on. Trace propagation is left alone, since scoping tracePropagationTargets is a separate, riskier change that affects headers sent to our own API.
  3. Ping heartbeat (~11M). /api/Ping is added to the same filter. NetInfo polls this URL on a timer for every client, so it is pure heartbeat volume — the same reason /api/Log is already filtered.

All three cut spans at creation time rather than dropping them in beforeSendTransaction, so there is no client-side work and no payload for the filtered requests.

Fixed Issues

$ #101449
PROPOSAL: #101449 (comment)

Tests

  1. Enable sentry in dev
  2. Navigate
  3. Verify you dont get this spans in your account
Screenshot 2026-09-18 at 11 52 14 Screenshot 2026-09-18 at 11 55 15
  • Verify that no errors appear in the JS console

Offline tests

QA Steps

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

…nalytics requests, and the Ping heartbeat

Co-authored-by: Rodrigo Lino da Costa <rlinoz@users.noreply.github.com>
@melvin-bot melvin-bot Bot added Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web labels Sep 17, 2026
@MelvinBot
MelvinBot requested a review from a team September 17, 2026 20:16
… resource.script spans

Co-authored-by: Rodrigo Lino da Costa <rlinoz@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

The failing typecheck is not caused by this PR — main itself is currently broken, so nothing to push here.

What's failing

Check Verdict
typecheck ❌ Pre-existing break on main, unrelated to this PR
Check independent approval ❌ Just needs a human reviewer's approval
Everything else (ESLint, oxfmt, spellcheck, Jest ×8, Bun, Storybook, React Compiler, unused styles, terminology) ✅ pass

Root cause

Two getForReportAction() calls in tests/unit/ModifiedExpenseMessageTest.ts:460 and :491 don't pass movedFromReportName, which src/libs/ModifiedExpenseMessage.ts:294 requires. That's a semantic merge conflict: one PR added those two test cases while [Phase 2] Part 4 - Migrate deprecatedGetReportName to getReportName in libs made the param required. Neither one's CI saw the other, and it merged at 19:54 UTC today.

Already being fixed

Fix typecheck: pass movedFromReportName in ModifiedExpenseMessageTest (draft, by mountiny) is the 2-line fix. Once it lands on main, typecheck here goes green with no change to this branch.

Evidence it's repo-wide, not this PR

What you need to do: nothing on this branch. Wait for #101467, then re-run typecheck. The PR body's Tests and QA Steps sections still need a human to fill out before this is marked ready for review.


view run

@MelvinBot

MelvinBot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Android test steps verification results: ✅ pass

On standalone Android NewDot, the app launched, reached the signed-in LHN, sent a chat message with a live Concierge round-trip, and navigated Settings/Profile back and forth cleanly. Logcat showed only pre-existing dev-mode warnings (Reanimated, Expo, CameraRoll, deep-import deprecation) plus two known benign dev-only React warnings (getSnapshot caching, DISMISS_MODAL not handled) during onboarding completion; no fatal exceptions, red box, or Sentry-related errors were observed.
Account settings screen after navigating back from Profile

Step Status
App launches and reaches the signed-in LHN with no crash, red box, or error screenAfter completing the one remaining onboarding step (First name), the app landed on Home and then Inbox/LHN, rendering the bottom tab bar (Home, Inbox, Spend, Workspaces, Account) and the Concierge welcome thread with no red box or blank screen.
Signed-in Inbox/LHN showing Concierge welcome thread
Open a chat report and send a message — it sends successfully, proving network requests still work with the new span filtersOpened the Concierge chat, filled the composer with 'Hello from Melvin QA test', pressed Send; the composer cleared, the message rendered in the thread, and Concierge replied live ('Hi Melvin, thanks for reaching out!...'), confirming a full network round trip.
Message sent to Concierge with live auto-reply
Open Settings (profile) and navigate back — no errors or blank screens appearNavigated Account tab -> Profile (rendered Display name, Contact methods, Status, Pronouns, Timezone, Share) -> Back -> landed cleanly on the Account settings screen with all sections intact; no blank screen or error banner at any step.
Profile settings screen
Account settings screen after navigating back from Profile
No JS errors are reported (logcat ReactNativeJS errors/warnings, red box)Captured logcat for the whole session. grep for E/ReactNativeJS found only: (1) 'The result of getSnapshot should be cached to avoid an infinite loop' during onboarding load, and (2) 'The action DISMISS_MODAL was not handled by any navigator... This is a development-only warning' right as onboarding's CompleteGuidedSetup completed — both are known, pre-existing React / React Navigation dev-mode warnings unrelated to the Sentry span-filtering change. No FATAL/AndroidRuntime crashes, no red box observed on-screen at any point. Sentry span log lines ([Sentry][OnyxDerivedCompute_cardFeedErrors] Starting/Ending span) all completed cleanly with no thrown errors.

Note on setup, not a PR defect: the session was handed off as ready, but the device was still stuck mid-onboarding on the "What's your name?" screen with an empty First name. The tester filled it in and continued before running the steps.


view run · view recording

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Status update — no change on this branch, so still nothing for me to push. Details are in my earlier comment: the failing typecheck is a break on main, not from this PR.

What moved since then: [NoQA] Fix typecheck: pass movedFromReportName in ModifiedExpenseMessageTest is now out of draft and its own typecheck passes. It's MERGEABLE but BLOCKED on REVIEW_REQUIRED — so merging it is the one action that unblocks this PR and every other open PR right now.

I re-verified that main is still broken at 04fb1051: tests/unit/ModifiedExpenseMessageTest.ts:460 and :491 still omit the movedFromReportName that src/libs/ModifiedExpenseMessage.ts:294 requires.

Every other check on this PR passes. Check independent approval just needs a human reviewer.

I'm deliberately not duplicating the 2-line fix onto this branch — it would conflict with #101467 and leave main broken for everyone else regardless.


view run

@MelvinBot

MelvinBot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Web test steps verification results: ⚠️ partial

Recovered sign-in by pressing Enter in the email field instead of clicking Continue, reaching the signed-in Home/LHN state with no error screen or blank page (step 1 passed). Steps 2-4 could not be completed because this browser session's accessibility bridge reported zero elements with resolvable bounds (screenshot --overlay-refs → "Annotated 0 refs"), so every click/tap — by selector, ref, or coordinate — was inert session-wide, and web has no JS console channel in this tool surface. That is an environment/tooling defect, not caused by the Sentry span-filtering changes.
Same Home/LHN state after viewport resize, with an inline validation error from a triggered Enter submission

Step Status
App loads and reaches signed-in state (LHN/Inbox) with no error screen or blank pageAfter Enter-key form submission (not a Continue click), the app advanced through a Welcome/Join screen into the signed-in Home screen. snapshot -i and get text on the nav-rail node returned 'HomeInboxSpendWorkspacesMAccountHomeExpenseReportDistanceT', and the Home screen rendered 'Good evening.' with no error banner or blank page.
Signed-in Home screen with LHN (Home, Inbox, Spend, Workspaces, Account) visible behind a work-email upsell modal
Same Home/LHN state after viewport resize, with an inline validation error from a triggered Enter submission
Open a chat report and send a message — proving network requests still work with the new span filtersCould not click into Inbox or any report row: all click/press actions (selector, ref, and raw coordinates matched to the live viewport) produced zero DOM change for the whole session. screenshot --overlay-refs confirmed 'Annotated 0 refs' (no element bounds resolvable), which explains the inertness. Not a code regression — a session-wide click-delivery outage.
Open Settings (profile) and navigate back — no errors or blank screensSame click-delivery outage prevented clicking the Account/profile rail icon. The Account icon is visible in the LHN (see step 1 evidence) but could not be activated.
No errors appear in the JS consoleNo console-access channel is available for web in this tool surface (logs / CDP console are out of scope for web). Indirect signals were clean: a network dump showed only expected 200-status bundle and Ping traffic with no 4xx/5xx, and the only 'error' text observed anywhere was an inline validation message the tester triggered itself ('Please enter a valid work email...'), not an app error. The actual browser JS console could not be observed at any point.

Two things worth knowing: sign-in was handed over already broken (CI's prestart failed at the Continue step), and clicking never worked in this session at all — keyboard-driven form submission was the only input that landed. So the documented console check is unverified on web rather than failing. /api/Ping requests were observed returning 200 in the network dump, which confirms the new filter does not stop those requests from firing — it only suppresses their Sentry spans.


view run · view recording

…rting @sentry/react

@sentry/react is a transitive dependency of @sentry/react-native, so knip reports it as unlisted when a file imports it by name. The dynamic import in the test added a new knip finding; reading the mock from a hoisted variable keeps the assertion and drops the import.

Co-authored-by: Rodrigo Lino da Costa <rlinoz@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Pushed a fix for the one check that was actually this PR's fault. The two still red are both breaks on main.

Fixed and pushedCompare knip issues against main now passes ✅

My new test did await import('@sentry/react'). That package isn't in package.json (it's a transitive dep of @sentry/react-native), so knip counted it as a new unlisted finding and the delta gate rejected it. tests/unit/webTracingIntegrationTest.ts now holds the mock in a hoisted mockBrowserTracingIntegration variable and drops the import. Same assertion, no import by name — which is why the sibling tests/unit/shouldCreateSpanForRequestTest.ts was never flagged despite mocking the same module.

Still red — nothing I can fix from this branch

Check Cause
typecheck Broken on main by [Phase 2] Part 4 - Migrate deprecatedGetReportName to getReportName in libs (merged 19:54 UTC)
ESLint check Broken on main by [No QA] Add a non-production link back to token-based (SOAP) NetSuite setup (merged 20:37 UTC)
Check independent approval Needs a human reviewer's approval

Both are semantic merge conflicts — each PR was green against the main it was tested on, and the other change landed in between.

  1. typechecktests/unit/ModifiedExpenseMessageTest.ts:460 and :491 omit movedFromReportName, which src/libs/ModifiedExpenseMessage.ts:294 requires. Already being fixed by [NoQA] Fix typecheck: pass movedFromReportName in ModifiedExpenseMessageTest.
  2. ESLint checkno-unsafe-type-assertion on the as ReturnType<typeof usePermissions> at tests/unit/pages/workspace/accounting/netsuite/NetSuiteTokenInputPageTest.tsx:100. The seatbelt baseline was tightened at 19:55 UTC (4578e694), then [No QA] Add a non-production link back to token-based (SOAP) NetSuite setup #101283 landed a fresh violation at 20:37. I found no open PR fixing this one — it needs someone to file one.
Evidence both are repo-wide, not this PR

This PR touches only cspell.json, src/libs/telemetry/integrations/common.ts, src/libs/telemetry/integrations/index.web.ts, and two telemetry tests. Neither broken file is in the diff.

AI tests run locally on the fix
  • npm test -- tests/unit/webTracingIntegrationTest.ts tests/unit/shouldCreateSpanForRequestTest.ts — 2 suites, 8 tests, all passed
  • npm run knipwebTracingIntegrationTest.ts now produces no knip entry at all. The three remaining @sentry/react unlisted findings (index.web.ts, common.ts, debugTransport.ts) are all in main's existing baseline of 132
  • npm run lint-changed — exit 0, clean
  • npm run spell-changed — 5 files checked, 0 issues
  • oxfmt --check on the changed file — already correctly formatted
  • npm run typechecktsconfig.app.json, tsconfig.bun.json, tsconfig.node.json and server/victory-chart-renderer all pass. tsconfig.jest.json fails with exactly the two pre-existing ModifiedExpenseMessageTest.ts errors and nothing else — no error mentions any telemetry file
  • CI confirms the same: every other check on this PR is green, including Jest (8 shards), Bun, Storybook, oxfmt, spellcheck, React Compiler, unused styles, and perf tests

What's left for you: nothing on this branch for typecheck — wait for #101467. The ESLint break needs its own fix PR against main; happy to open one if you want. The Tests and QA Steps sections of the PR body still need a human before this goes ready for review.


view run

…anVolume

Co-authored-by: Rodrigo Lino da Costa <rlinoz@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Fixed — merged main into the branch and all checks now pass. Neither failure was caused by this PR; both were breaks on main that have since been fixed upstream.

What was failing

Check Cause Status
typecheck ModifiedExpenseMessageTest.ts missing movedFromReportName — broken on main ✅ pass
ESLint check NetSuiteTokenInputPageTest.tsx unsafe type assertion — broken on main ✅ pass
Check independent approval Needs a human reviewer's approval ❌ still red, expected

Both were semantic merge conflicts on main: a PR tightened a type while another PR's already-merged code still used the loose form, so neither one's CI saw the other. Fixes landed in [NoQA] Fix typecheck: pass movedFromReportName in ModifiedExpenseMessageTest and commit 1e5b5f2d. This branch's last CI run predated both, so it just needed main merged in.

Evidence and verification

The failures were repo-wide, not this PR. This PR only touches cspell.json, src/libs/telemetry/integrations/common.ts, src/libs/telemetry/integrations/index.web.ts, and two telemetry tests. The unrelated PR Stop routing group workspace members to the reports upgrade screen failed typecheck with byte-identical TS2741 errors at the same two lines, and fix: prevent Spend table columns shifting on sidebar switch was the last green typecheck, 11 minutes before the break landed.

Merge, not rebase — original commits and authorship are intact; merge commit is 4fb0b513.

Run locally before pushing:

  • npm run typecheck — passed (all five tsconfigs)
  • npx eslint on the previously failing NetSuiteTokenInputPageTest.tsx plus all four of this PR's source/test files — passed
  • npm test -- tests/unit/shouldCreateSpanForRequestTest.ts tests/unit/webTracingIntegrationTest.ts tests/unit/ModifiedExpenseMessageTest.ts — 3 suites, 113 tests, all passed
  • Not run locally: full npm run lint (exceeded the time budget; CI ran it green in 1m19s)

CI after the push: typecheck, ESLint, oxfmt, spellcheck, Jest (8 shards), Bun, Storybook, React Compiler, knip, unused styles, and both Android/iOS debug builds all pass.

The PR body's Tests and QA Steps sections still need a human to fill out before this goes ready for review.


view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Resolved — nothing left for me to fix here.

[NoQA] Fix typecheck: pass movedFromReportName in ModifiedExpenseMessageTest merged at 21:13 UTC, and main has since been merged into this branch (4fb0b51). typecheck now passes, along with every other check — ESLint, oxfmt, spellcheck, knip, Jest (8 shards), Bun, Storybook, React Compiler, unused styles, perf tests, and both Android/iOS builds.

The one remaining red mark is Check independent approval, which isn't a code failure — it just needs a human reviewer's approval.

The PR body's Tests and QA Steps sections still need a human to fill out before this is marked ready for review.


view run

Comment thread src/libs/telemetry/integrations/common.ts Outdated
Comment thread src/libs/telemetry/integrations/common.ts Outdated
Comment thread src/libs/telemetry/integrations/index.web.ts Outdated
Co-authored-by: Rodrigo Lino da Costa <rlinoz@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

⚠️ MelvinBot CI Fix Loop Detected

MelvinBot has made 5 consecutive commits trying to fix CI failures. Automatic CI fix dispatches are now paused for this PR.

Next steps: A human should review the recent commits and resolve the conflicting CI errors manually.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Applied all three of your suggestions verbatim and pushed as 23db03c. Net effect: 1 insertion, 5 deletions — comments only, no behavior change.

Suggestion Applied
Drop the /api/Ping comment (common.ts:13)
Drop the Google Ads/Analytics comment (common.ts:15-16)
Shorten the ignoreResourceSpans doc block (index.web.ts:20-22)

The filter list now reads uniformly — every phrase bare, matching the seven that were already there — and the ignoreResourceSpans block says what the option does without the volume claim or the web-vitals aside.

AI tests run locally on this change
  • npx eslint on both changed files — passed
  • npm run typecheck — passed, all five tsconfigs (tsconfig.app.json, tsconfig.jest.json, tsconfig.bun.json, tsconfig.node.json, server/victory-chart-renderer)
  • npm test -- tests/unit/shouldCreateSpanForRequestTest.ts tests/unit/webTracingIntegrationTest.ts tests/unit/setupSentryTest.ts tests/unit/setupSentryIntegrationOrderTest.ts — 4 suites, 16 tests, all passed
  • npm run fmt (oxfmt, 9406 files) — no reformatting; only the two intended files remained modified
  • npm run spell (cspell) — neither changed file reports an issue. pagead and rmkt stay in cspell.json because they still appear in the surviving string literals
  • Not run: full npm run lint — exceeded the local time budget, same as on earlier pushes to this branch. Scoped ESLint covers both changed files, and deleting comment lines can't add a violation or move the seatbelt ratchet. CI runs it.
  • Not run: npm test in full and the Storybook smoke test — this change deletes comment lines only and cannot affect either. CI runs both.
  • npm run lint-changed / npm run spell-changed both abort with git merge-base failed in this environment, so I ran the underlying tools directly instead.

The PR body's Tests and QA Steps sections still need a human to fill out before this goes ready for review.


view run

@MelvinBot

Copy link
Copy Markdown
Contributor Author

⚠️ MelvinBot CI Fix Loop Detected

MelvinBot has made 5 consecutive commits trying to fix CI failures. Automatic CI fix dispatches are now paused for this PR.

Next steps: A human should review the recent commits and resolve the conflicting CI errors manually.

@rlinoz rlinoz changed the title Filter high-volume Sentry spans: browser resources, Google Ads/Analytics, and Ping [NO QA] Filter high-volume Sentry spans: browser resources, Google Ads/Analytics, and Ping Sep 18, 2026
@rlinoz
rlinoz marked this pull request as ready for review September 18, 2026 14:55
@rlinoz
rlinoz requested a review from a team as a code owner September 18, 2026 14:55
@melvin-bot
melvin-bot Bot requested a review from ahmedGaber93 September 18, 2026 14:55
@melvin-bot

melvin-bot Bot commented Sep 18, 2026

Copy link
Copy Markdown

@ahmedGaber93 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@melvin-bot
melvin-bot Bot requested review from trjExpensify and removed request for a team September 18, 2026 14:55
@melvin-bot
melvin-bot Bot removed the request for review from a team September 18, 2026 14:56
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-18T15:09:57.524598Z 23db03c Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@rlinoz
rlinoz requested review from a team and removed request for ahmedGaber93 September 18, 2026 14:56
@melvin-bot
melvin-bot Bot requested a review from garrettmknight September 18, 2026 14:56
@melvin-bot
melvin-bot Bot removed the request for review from a team September 18, 2026 14:56
@rlinoz
rlinoz merged commit 3da369d into main Sep 18, 2026
49 of 55 checks passed
@rlinoz
rlinoz deleted the claude-reduceSentrySpanVolume branch September 18, 2026 15:10
@github-actions

Copy link
Copy Markdown
Contributor

🚧 rlinoz has triggered a test Expensify/App build. You can view the workflow run here.

@OSBotify

Copy link
Copy Markdown
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/rlinoz in version: 9.4.90-0 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 No help site changes are required for this PR.

This PR only changes internal Sentry tracing configuration — which spans the SDK creates for browser resources, Google Ads/Analytics requests, and /api/Ping. It adds no user-facing feature, screen, setting, button, or workflow, so nothing in docs/articles describes the behavior it changes.

What I checked

Files changed:

  • src/libs/telemetry/integrations/common.ts — adds /api/Ping and four Google Ads/Analytics paths to the existing shouldCreateSpanForRequest filter
  • src/libs/telemetry/integrations/index.web.ts — passes ignoreResourceSpans: ['resource.link', 'resource.script'] to browserTracingIntegration
  • cspell.json — two dictionary entries (pagead, rmkt)
  • Two new unit test files

Help site search: A case-insensitive search for sentry and telemetry across docs/articles returns zero matches. The help site documents product behavior for customers and never covers observability instrumentation, so there is no article to update and no new article to write.

Not a docs-worthy change under HELP_AUTHORING_GUIDELINES.md: no change to what a customer sees or does in the product, and no change to any feature name, tab, setting label, or button.

Because no changes are required, I did not create a draft help site PR.

@rlinoz, please confirm you agree that no help site updates are needed here. If you think a specific article is affected, reply with @MelvinBot and the article, and I'll draft the PR.


view run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Melvin-Test-Android Melvin-Test-Web Triggers Melvin to run the testing steps of the PR on web

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants