gastownhall/beads · error
description does not support %s operator
Error message
description does not support %s operator
What it means
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.
Source
Thrown at internal/query/evaluator.go:884
value := comp.Value
isNone := value == "" || strings.ToLower(value) == "none" || strings.ToLower(value) == "null"
switch comp.Op {
case OpEquals:
if isNone {
return func(i *types.Issue) bool { return i.Description == "" }, nil
}
return func(i *types.Issue) bool {
return strings.Contains(strings.ToLower(i.Description), strings.ToLower(value))
}, nil
case OpNotEquals:
if isNone {
return func(i *types.Issue) bool { return i.Description != "" }, nil
}
return func(i *types.Issue) bool {
return !strings.Contains(strings.ToLower(i.Description), strings.ToLower(value))
}, nil
default:
return nil, fmt.Errorf("description does not support %s operator", comp.Op.String())
}
}
func (e *Evaluator) buildNotesPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {
value := strings.ToLower(comp.Value)
switch comp.Op {
case OpEquals:
return func(i *types.Issue) bool {
return strings.Contains(strings.ToLower(i.Notes), value)
}, nil
case OpNotEquals:
return func(i *types.Issue) bool {
return !strings.Contains(strings.ToLower(i.Notes), value)
}, nil
default:
return nil, fmt.Errorf("notes does not support %s operator", comp.Op.String())
}
}View on GitHub (pinned to 71377f2769)
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.
Example fix
// before bd list --query "description = flaky test" // after bd list --query "description contains flaky test"
Defensive patterns
Strategy: validation
Validate before calling
// Go: description supports contains and != only
if !isContainsOp(comp.Op) && comp.Op != query.OpNotEquals {
return fmt.Errorf("description supports only contains and !=, got %s", comp.Op)
} Try / catch
// Go
pred, err := e.buildComparisonPredicate(node)
if err != nil {
return fmt.Errorf("description filter invalid: %w", err)
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- status does not support %s operator
- unexpected operator: %s
- type does not support %s operator
- assignee does not support %s operator
- owner does not support %s operator
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/301aaefdcbffe96e.
Report an issue: GitHub.