{"record":{"id":"5889f519fb646328","repo":"gastownhall/beads","slug":"type-does-not-support-s-operator","errorCode":null,"errorMessage":"type does not support %s operator","messagePattern":"type does not support (.+?) operator","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/query/evaluator.go","lineNumber":781,"sourceCode":"\t\treturn func(i *types.Issue) bool { return i.Priority <= priority }, nil\n\tcase OpGreater:\n\t\treturn func(i *types.Issue) bool { return i.Priority > priority }, nil\n\tcase OpGreaterEq:\n\t\treturn func(i *types.Issue) bool { return i.Priority >= priority }, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unexpected operator: %s\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildTypePredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\tissueType := types.IssueType(strings.ToLower(comp.Value))\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\treturn func(i *types.Issue) bool { return i.IssueType == issueType }, nil\n\tcase OpNotEquals:\n\t\treturn func(i *types.Issue) bool { return i.IssueType != issueType }, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"type does not support %s operator\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildAssigneePredicate(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 i.Assignee == \"\" }, nil\n\t\t}\n\t\treturn func(i *types.Issue) bool { return strings.EqualFold(i.Assignee, value) }, nil\n\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:","sourceCodeStart":763,"sourceCodeEnd":799,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/query/evaluator.go#L763-L799","documentation":"The `type` (IssueType) field only supports Equals and NotEquals comparisons. Any other operator in a type comparison reaches the default branch of buildTypePredicate and returns this error. Issue types are categorical labels (bug, feature, task, etc.), so ordering comparisons are meaningless by design.","triggerScenarios":"A query filter like `type > bug` or `type <= task` — any comparison on type with an operator other than = or !=.","commonSituations":"Users trying to express ranges over categorical types; reusing a numeric-filter query template with the type field; dialect mix-ups from SQL or JQL where different semantics exist.","solutions":["Use `type = <type>` or `type != <type>` only.","To exclude several types, chain with AND: `type != bug AND type != chore`.","The value is lowercased before matching, so case does not need exactness."],"exampleFix":"// before\nbd list --query \"type > bug\"\n// after\nbd list --query \"type != bug\"","handlingStrategy":"validation","validationCode":"// Go: type is categorical; enforce equality-only ops\nif comp.Op != query.OpEquals && comp.Op != query.OpNotEquals {\n    return fmt.Errorf(\"type supports only = and !=, got %s\", comp.Op)\n}","typeGuard":null,"tryCatchPattern":"// Go\npred, err := e.buildComparisonPredicate(node)\nif err != nil {\n    return fmt.Errorf(\"filter on type failed: %w\", err)\n}","preventionTips":["Restrict type filters to = and !=.","Exclude multiple types with chained AND != filters.","Rely on case-insensitive value matching; no need for exact case."],"tags":["query-language","unsupported-operator","issue-type"],"backgroundTag":"query-unsupported-operator","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}