Frontend sends unsupported `includeForked` parameter to blobSearch GraphQL query
## Summary Frontend code in `scope_sidebar_navigation.vue` is sending an unsupported `includeForked` parameter to the `blobSearch` GraphQL query, causing GraphQL errors since the backend only accepts `excludeForks`. **Related to:** https://gitlab.com/gitlab-com/gl-infra/production/-/work_items/21292+ - GraphQL query error rate violating SLO in main stage **Severity:** High - Causing 0.6035% GraphQL error rate in production ## Steps to reproduce 1. Navigate to GitLab global search (no group/project context) 2. Open browser DevTools → Network tab 3. Perform a blob/code search 4. Inspect the `blobSearch` GraphQL request payload ## What is the current *bug* behavior? The frontend sends a GraphQL query with the unsupported parameter: ```javascript { search: "test", chunkCount: 5, groupId: undefined, projectId: undefined, includeArchived: false, includeForked: false, // ❌ Unsupported parameter regex: false } ``` **Result:** Backend rejects the request with a GraphQL error because `includeForked` is not a valid argument for `blobSearch`. ## What is the expected *correct* behavior? The frontend should send the correct parameter: ```javascript { search: "test", chunkCount: 5, groupId: undefined, projectId: undefined, includeArchived: false, excludeForks: true, // ✅ Correct parameter regex: false } ``` **Result:** Backend accepts the request and returns search results successfully. ## Root Cause This is a parameter mismatch between the Vue component and the GraphQL query/backend: 1. **GraphQL Query** (`blob_search_zoekt_count_only.query.graphql` line 8) declares: ```graphql $excludeForks: Boolean ``` 2. **Backend** (`blob_search_resolver.rb` line 15) accepts: ```ruby argument :exclude_forks, GraphQL::Types::Boolean, required: false, default_value: true ``` 3. **BUT Frontend** (`scope_sidebar_navigation.vue` line 35) passes: ```javascript includeForked: parseBoolean(this.query.include_forked), // ❌ Wrong parameter! ``` ### Timeline - **May 13, 2025** (commit `d674115dc1c4`): GraphQL query updated to use `excludeForks` - **May 21, 2025** (commit `67a94f91248d`): Backend removed `include_forked` parameter - **BUT**: `scope_sidebar_navigation.vue` was never updated - **Feb 12, 2026**: Deployed to production → **Incident began** ## Relevant logs and/or screenshots **Error in production:** - GraphQL error rate: 0.6035% - Alert: `ApiServiceGraphqlQueryErrorSLOViolation` - Source: Small number of customers from two remote IP addresses **GraphQL Error Message:** ``` Field 'includeForked' doesn't exist on type 'Query.blobSearch' ``` ## Possible fixes ### Fix Location **File:** `app/assets/javascripts/search/sidebar/components/scope_sidebar_navigation.vue` **Line 35 - Change:** ```javascript includeForked: parseBoolean(this.query.include_forked), ``` **To:** ```javascript excludeForks: parseBoolean(this.query.exclude_forks), ``` **Rationale:** - The UI filter (`forks_filter/index.vue`) writes `exclude_forks` to URL query params - The GraphQL query expects `excludeForks` - The backend accepts `exclude_forks` - All use the same semantics (no logic inversion needed) ### Test Updates **File:** `spec/frontend/search/sidebar/components/scope_sidebar_navigation_spec.js` **Lines 153 and 177 - Change:** ```javascript includeForked: false, ``` **To:** ```javascript excludeForks: true, ``` ## Why Tests Didn't Catch This The unit tests were validating the **wrong** behavior. They expected `includeForked` to be sent: ```javascript it('makes graphql query with correct variables for group search', () => { expect(blobCountHandler).toHaveBeenCalledWith({ // ... includeForked: false, // ❌ Test expects wrong parameter // ... }); }); ``` The tests passed even though the code was sending an unsupported parameter! ## Additional Context **Related MRs:** - !222813 - Removed orphaned feature flag but missed this issue - Original conversion MR that updated GraphQL query but missed Vue component **Incident Reference:** - INC-7434 - GraphQL query error rate violating SLO in main stage - Slack: #inc-7434-graphql-query-error-rate-violating-slo-in-main-stage - Runbook: https://runbooks.gitlab.com/api/#alerts **Files Affected:** - `app/assets/javascripts/search/sidebar/components/scope_sidebar_navigation.vue` (needs fix) - `spec/frontend/search/sidebar/components/scope_sidebar_navigation_spec.js` (needs fix) **Related Files (for context):** - `app/assets/javascripts/search/graphql/blob_search_zoekt_count_only.query.graphql` (already correct) - `ee/app/graphql/resolvers/search/blob/blob_search_resolver.rb` (already correct) - `app/assets/javascripts/search/sidebar/components/forks_filter/index.vue` (already correct)
issue