Repository navigation
fix(graphql): treat schema validation errors as client errors - #2583
Open
sentry[bot] wants to merge 1 commit into
Open
sentry[bot] wants to merge 1 commit into
sentry[bot] wants to merge 1 commit into
Conversation
Contributor
Author
|
The Sentry GitHub App installation for this repository is missing permissions it needs to keep iterating on this pull request to get CI passing. Review and accept the updated permissions to let Seer continue: https://github.com/organizations/codecov/settings/installations/86101127/permissions/update |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When an anonymous client submitted a GraphQL request referencing non-existent types or fields (e.g.
mutation($input: UpdateDefaultBranchInput!) { updateDefaultBranch(input: $input) ... }), the GraphQL validation phase failed with aGraphQLErrorcontaining nooriginal_error.In
graphql_api.views.error_formatter, unauthenticated requests with malformed queries fell through to the fallback branch, which:INTERNAL SERVER ERROR(hiding the validation error from the client),ERRORlevel, andcapture_exception(original_error)(and the Ariadne integration captured theGraphQLErroras an unhandled server error in Sentry).Solution
graphql_api/views.py, detect schema validation errors (errors with nooriginal_errorwhose message begins with knowngraphql-corevalidation prefixes such asUnknown type,Cannot query field,Unknown argument, etc.). Surface the formatted error withtype: 'ValidationError', log a warning, incrementapi_gql_counts_validation_errors, and avoid reporting to Sentry.codecov/settings_base.py, add abefore_sendhook tosentry_sdk.initto dropGraphQLErrorevents caused solely by schema validation, preventing Ariadne's automated exception capture from creating Sentry issues for client-side typos and invalid queries.Legal Boilerplate
Look, I get it. The entity doing business as "Codecov" is owned by Harness, Inc. In 2026 Harness acquired Codecov and as a result Harness is going to need some rights from me in order to utilize my contributions in this PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Harness can use, modify, copy, and redistribute my contributions, under Harness's choice of terms.
Fixes API-FAV
@sentry <feedback>: Autofix iterates on these changes@sentry stop iterating: Autofix stops iterating on this runThis PR was automatically generated by Sentry. You can adjust this setting at any time.
Note
Low Risk
Behavior change is limited to GraphQL error formatting and Sentry filtering for known client-side validation failures; real server exceptions remain reported unchanged.
Overview
GraphQL schema validation failures are now treated as client errors instead of internal server faults, so anonymous callers get real validation messages and Sentry stops filling with bogus API issues.
In
graphql_api/views.py, validation is detected viais_graphql_validation_error(nooriginal_error, message matches known graphql-core prefixes). Those responses usetype: ValidationError, log at warning, and incrementapi_gql_counts_validation_errors—without masking the message asINTERNAL SERVER ERRORor callingcapture_exception. Resolver and service exceptions still follow the existing server-error path.In
codecov/settings_base.py, Sentry init gets abefore_sendhook that drops matchingGraphQLErrorevents so Ariadne’s automatic capture doesn’t reopen the same noise; prefix lists stay duplicated with a sync comment toGQL_VALIDATION_ERROR_PREFIXES.Reviewed by Cursor Bugbot for commit a7446eb. Bugbot is set up for automated code reviews on this repo. Configure here.