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

  1. Use the contains operator with a keyword from the description.
  2. Use `!=` to exclude descriptions containing the text.
  3. 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

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


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/301aaefdcbffe96e. Report an issue: GitHub.