gastownhall/beads · error
status does not support %s operator
Error message
status does not support %s operator
What it means
The query evaluator only supports Equals and NotEquals comparisons on the `status` field. When a query filter compares status with any other operator (e.g. >, <, >=, <=, ~), buildStatusPredicate returns this error. It is a static query-language restriction, not a runtime data problem.
Source
Thrown at internal/query/evaluator.go:746
case "has_metadata_key":
return e.buildHasMetadataKeyPredicate(comp)
default:
if strings.HasPrefix(comp.Field, "metadata.") {
return e.buildMetadataPredicate(comp)
}
return nil, fmt.Errorf("unknown field: %s", comp.Field)
}
}
func (e *Evaluator) buildStatusPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {
status := types.Status(strings.ToLower(comp.Value))
switch comp.Op {
case OpEquals:
return func(i *types.Issue) bool { return i.Status == status }, nil
case OpNotEquals:
return func(i *types.Issue) bool { return i.Status != status }, nil
default:
return nil, fmt.Errorf("status does not support %s operator", comp.Op.String())
}
}
func (e *Evaluator) buildPriorityPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {
priority, err := strconv.Atoi(comp.Value)
if err != nil {
return nil, fmt.Errorf("invalid priority: %s", comp.Value)
}
switch comp.Op {
case OpEquals:
return func(i *types.Issue) bool { return i.Priority == priority }, nil
case OpNotEquals:
return func(i *types.Issue) bool { return i.Priority != priority }, nil
case OpLess:
return func(i *types.Issue) bool { return i.Priority < priority }, nil
case OpLessEq:
return func(i *types.Issue) bool { return i.Priority <= priority }, nil
case OpGreater:View on GitHub (pinned to 71377f2769)
Solutions
- Rewrite the filter to use `=` or `!=` on status, e.g. `status = open`.
- If you need multiple statuses, combine with OR: `status = open OR status = in_progress`.
- If an ordering comparison was intended, order by priority or created date instead of status.
Example fix
// before (query string) bd list --query "status > open" // after bd list --query "status = open OR status = in_progress"
Defensive patterns
Strategy: validation
Validate before calling
// Go: validate before building/running the query
func validStatusOp(op query.Op) bool { return op == query.OpEquals || op == query.OpNotEquals }
if !validStatusOp(comp.Op) {
return fmt.Errorf("rewrite filter: use = or != for status, got %s", comp.Op)
} Try / catch
// Go
pred, err := e.buildComparisonPredicate(node)
if err != nil {
var qe *QueryError
if errors.As(err, &qe) { /* surface field/operator to user */ }
return fmt.Errorf("bad filter %q: %w", node.String(), err)
} Prevention
- Only ever use = or != on status in query strings.
- Express multiple statuses with OR of equality filters.
- Validate user-supplied query strings against a per-field operator whitelist before running.
When it happens
Trigger: Running a bd query (bd list / search with a query string) whose WHERE-style comparison uses a non-equality operator on status, e.g. `status > open` or `status ~ in_progress`.
Common situations: Users assuming status is ordered (open < in_progress < closed) and trying range operators; copy-pasting numeric/label comparison syntax from other query languages; typos where an intended field like priority got the status key.
Related errors
- unexpected operator: %s
- type does not support %s operator
- assignee does not support %s operator
- owner does not support %s operator
- label does not support %s operator
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/e320fc298ea01d47.
Report an issue: GitHub.