{"record":{"id":"b8eec12758c16b57","repo":"gastownhall/beads","slug":"owner-does-not-support-s-operator","errorCode":null,"errorMessage":"owner does not support %s operator","messagePattern":"owner does not support (.+?) operator","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/query/evaluator.go","lineNumber":812,"sourceCode":"\tcase OpNotEquals:\n\t\tif isNone {\n\t\t\treturn func(i *types.Issue) bool { return i.Assignee != \"\" }, nil\n\t\t}\n\t\treturn func(i *types.Issue) bool { return !strings.EqualFold(i.Assignee, value) }, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"assignee does not support %s operator\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildOwnerPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\tvalue := comp.Value\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\treturn func(i *types.Issue) bool { return strings.EqualFold(i.Owner, value) }, nil\n\tcase OpNotEquals:\n\t\treturn func(i *types.Issue) bool { return !strings.EqualFold(i.Owner, value) }, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"owner does not support %s operator\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildLabelPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\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 len(i.Labels) == 0 }, nil\n\t\t}\n\t\treturn func(i *types.Issue) bool {\n\t\t\tfor _, l := range i.Labels {\n\t\t\t\tif strings.EqualFold(l, value) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false","sourceCodeStart":794,"sourceCodeEnd":830,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/query/evaluator.go#L794-L830","documentation":"The `owner` field only supports Equals and NotEquals comparisons, matched case-insensitively via strings.EqualFold. Any other operator in an owner comparison reaches buildOwnerPredicate's default branch and returns this error.","triggerScenarios":"A query filter like `owner ~ bob` or `owner >= carol` — comparison on owner with any operator other than = or !=.","commonSituations":"Attempting partial-name matching with a contains-style operator; copying label/text filters that support richer operators; assuming owner behaves like a sortable text field.","solutions":["Use `owner = <name>` or `owner != <name>` with the full name (case-insensitive).","For finding unowned issues, check whether the value \"\" matches: `owner = \"\"`.","If fuzzy matching is needed, filter results in a script instead of the query language."],"exampleFix":"// before\nbd list --query \"owner ~ bob\"\n// after\nbd list --query \"owner = bob\"","handlingStrategy":"validation","validationCode":"// Go: owner supports only = and !=\nif comp.Op != query.OpEquals && comp.Op != query.OpNotEquals {\n    return fmt.Errorf(\"owner supports only = and !=, got %s\", comp.Op)\n}","typeGuard":null,"tryCatchPattern":"// Go\npred, err := e.buildComparisonPredicate(node)\nif err != nil {\n    return fmt.Errorf(\"owner filter invalid: %w\", err)\n}","preventionTips":["Use exact (case-insensitive) owner names with = or !=.","Do not attempt contains/range operators on owner.","Post-filter results in code when fuzzy matching is required."],"tags":["query-language","unsupported-operator","owner"],"backgroundTag":"query-unsupported-operator","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}