{"record":{"id":"1973fae234b65ac2","repo":"gastownhall/beads","slug":"failed-to-search-issues-by-description-w","errorCode":null,"errorMessage":"failed to search issues by description: %w","messagePattern":"failed to search issues by description: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/linear/client.go","lineNumber":781,"sourceCode":"\t\t\t\"id\": map[string]interface{}{\n\t\t\t\t\"eq\": c.TeamID,\n\t\t\t},\n\t\t},\n\t\t\"description\": map[string]interface{}{\n\t\t\t\"contains\": text,\n\t\t},\n\t}\n\n\treq := &GraphQLRequest{\n\t\tQuery: query,\n\t\tVariables: map[string]interface{}{\n\t\t\t\"filter\": filter,\n\t\t},\n\t}\n\n\tdata, err := c.Execute(ctx, req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to search issues by description: %w\", err)\n\t}\n\n\tvar issuesResp IssuesResponse\n\tif err := json.Unmarshal(data, &issuesResp); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse description search response: %w\", err)\n\t}\n\n\tif len(issuesResp.Issues.Nodes) > 0 {\n\t\treturn &issuesResp.Issues.Nodes[0], nil\n\t}\n\treturn nil, nil\n}\n\n// issueCreateMutation is the GraphQL mutation for creating a Linear issue.\nconst issueCreateMutation = `\n\tmutation CreateIssue($input: IssueCreateInput!) {\n\t\tissueCreate(input: $input) {\n\t\t\tsuccess","sourceCodeStart":763,"sourceCodeEnd":799,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/linear/client.go#L763-L799","documentation":"FindIssueByDescriptionContains issues a GraphQL query filtering issues by description substring. Any failure from c.Execute — transport, HTTP status, or GraphQL-level error — is wrapped with this message so the caller knows the description search itself failed (distinct from 'no match found', which returns nil, nil).","triggerScenarios":"Execute fails while running the description-contains filter query: network error, invalid API key (401), rate limit (429), or a GraphQL validation error such as an invalid `filter` structure sent to the Linear API.","commonSituations":"Expired LINEAR_API_KEY, transient network outage during idempotent issue creation (CreateIssueIdempotent) or after an ambiguous batch (recoverAfterAmbiguousBatch), Linear API schema changes invalidating the filter input shape.","solutions":["Unwrap the cause with errors.As/Is to find the root transport or GraphQL error and fix that specifically.","Validate the API key with a `viewer { id }` query.","If the cause is 429, retry with backoff respecting Linear's rate-limit headers.","If the cause is a GraphQL validation error, compare the filter payload against the current Linear schema."],"exampleFix":"// before\nif err != nil {\n    return nil, fmt.Errorf(\"failed to search issues by description: %w\", err)\n}\n// after\nif err != nil {\n    if isTransient(err) {\n        return nil, RetryableError{fmt.Errorf(\"failed to search issues by description: %w\", err)}\n    }\n    return nil, fmt.Errorf(\"failed to search issues by description: %w\", err)\n}","handlingStrategy":"retry","validationCode":"if apiKey == \"\" {\n    return errors.New(\"Linear API key missing; cannot search issues\")\n}\nif description == \"\" {\n    return errors.New(\"empty description substring; search would be meaningless\")\n}","typeGuard":null,"tryCatchPattern":"issue, err := client.FindIssueByDescriptionContains(ctx, desc)\nif err != nil {\n    if isRetryable(err) { // 429, timeout, 5xx\n        issue, err = retryWithBackoff(3, func() (*linear.Issue, error) {\n            return client.FindIssueByDescriptionContains(ctx, desc)\n        })\n    }\n    if err != nil {\n        return fmt.Errorf(\"dedupe check failed: %w\", err)\n    }\n}","preventionTips":["Use exponential backoff on rate-limit errors.","Distinguish nil,nil (no match) from err (search failed) at call sites.","Preflight API key validity at client construction.","Handle GraphQL validation errors by pinning the query to a tested schema version."],"tags":["network","graphql","linear","search"],"backgroundTag":"api-request-failed","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}