{"record":{"id":"301aaefdcbffe96e","repo":"gastownhall/beads","slug":"description-does-not-support-s-operator","errorCode":null,"errorMessage":"description does not support %s operator","messagePattern":"description does not support (.+?) operator","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/query/evaluator.go","lineNumber":884,"sourceCode":"\tvalue := comp.Value\n\tisNone := value == \"\" || strings.ToLower(value) == \"none\" || strings.ToLower(value) == \"null\"\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\tif isNone {\n\t\t\treturn func(i *types.Issue) bool { return i.Description == \"\" }, nil\n\t\t}\n\t\treturn func(i *types.Issue) bool {\n\t\t\treturn strings.Contains(strings.ToLower(i.Description), strings.ToLower(value))\n\t\t}, nil\n\tcase OpNotEquals:\n\t\tif isNone {\n\t\t\treturn func(i *types.Issue) bool { return i.Description != \"\" }, nil\n\t\t}\n\t\treturn func(i *types.Issue) bool {\n\t\t\treturn !strings.Contains(strings.ToLower(i.Description), strings.ToLower(value))\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"description does not support %s operator\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildNotesPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\tvalue := strings.ToLower(comp.Value)\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\treturn func(i *types.Issue) bool {\n\t\t\treturn strings.Contains(strings.ToLower(i.Notes), value)\n\t\t}, nil\n\tcase OpNotEquals:\n\t\treturn func(i *types.Issue) bool {\n\t\t\treturn !strings.Contains(strings.ToLower(i.Notes), value)\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"notes does not support %s operator\", comp.Op.String())\n\t}\n}","sourceCodeStart":866,"sourceCodeEnd":902,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/query/evaluator.go#L866-L902","documentation":"The `description` field supports contains-style matching and NotEquals, with special none/null/empty handling that matches issues having a non-empty description. Any other operator reaches the default branch of buildDescriptionPredicate and returns this error.","triggerScenarios":"A query filter like `description = none` if equality is not supported for this field, or `description > text` — an operator outside the contains/not-equals set.","commonSituations":"Trying exact full-text equality on descriptions; expecting SQL-like = semantics; attempting to find empty vs non-empty descriptions with an unsupported operator instead of the none form.","solutions":["Use the contains operator with a keyword from the description.","Use `!=` to exclude descriptions containing the text.","To find issues with empty descriptions, use the supported none form (`description = none` if handled) rather than an unsupported operator."],"exampleFix":"// before\nbd list --query \"description = flaky test\"\n// after\nbd list --query \"description contains flaky test\"","handlingStrategy":"validation","validationCode":"// Go: description supports contains and != only\nif !isContainsOp(comp.Op) && comp.Op != query.OpNotEquals {\n    return fmt.Errorf(\"description supports only contains and !=, got %s\", comp.Op)\n}","typeGuard":null,"tryCatchPattern":"// Go\npred, err := e.buildComparisonPredicate(node)\nif err != nil {\n    return fmt.Errorf(\"description filter invalid: %w\", err)\n}","preventionTips":["Search descriptions by keyword with contains, not full-text equality.","Use the none/empty sentinel semantics for missing descriptions.","For complex text search, export and grep/filter outside the query language."],"tags":["query-language","unsupported-operator","full-text-search"],"backgroundTag":"query-unsupported-operator","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}