gastownhall/beads · error
%s only supports = operator
Error message
%s only supports = operator
What it means
Thrown by the shared boolean-field filter (used for `pinned`, `ephemeral`, etc.) when the field is compared with an operator other than `=`. Boolean fields only support equality against truthy/falsy literals.
Source
Thrown at internal/query/evaluator.go:463
if strings.HasSuffix(comp.Value, "*") {
filter.SpecIDPrefix = strings.TrimSuffix(comp.Value, "*")
} else {
filter.SpecIDPrefix = comp.Value
}
return nil
}
func (e *Evaluator) applyParentFilter(comp *ComparisonNode, filter *types.IssueFilter) error {
if comp.Op != OpEquals {
return fmt.Errorf("parent only supports = operator")
}
filter.ParentID = &comp.Value
return nil
}
func (e *Evaluator) applyBoolFilter(comp *ComparisonNode, filter *types.IssueFilter, field string) error {
if comp.Op != OpEquals {
return fmt.Errorf("%s only supports = operator", field)
}
val := strings.ToLower(comp.Value)
var boolVal bool
switch val {
case "true", "yes", "1":
boolVal = true
case "false", "no", "0":
boolVal = false
default:
return fmt.Errorf("invalid boolean value for %s: %s", field, comp.Value)
}
switch field {
case "pinned":
filter.Pinned = &boolVal
case "ephemeral":
filter.Ephemeral = &boolVal
case "template":View on GitHub (pinned to 71377f2769)
Solutions
- Use `pinned = true` / `pinned = false` (or `ephemeral = ...`).
- Replace `field != false` with `field = true` and vice versa.
- Remember accepted boolean literals: true/false, yes/no, 1/0 (case-insensitive).
Example fix
// before bd list 'pinned != false' // after bd list 'pinned = true'
Defensive patterns
Strategy: validation
Validate before calling
func validateBoolComparison(field, op string) error {
if op != "=" {
return fmt.Errorf("%s supports only =, got %q", field, op)
}
return nil
} Prevention
- Write boolean conditions only as `field = true|false`.
- Replace any `!= false` pattern with `= true`.
- Restrict boolean fields to = in generated queries.
When it happens
Trigger: Queries like `pinned != false`, `ephemeral > 0`, or `pinned ~ true` reaching applyBoolFilter.
Common situations: Writing `pinned != false` to mean "is pinned" instead of `pinned = true`; SQL-style boolean comparisons; copying filters between query languages.
Related errors
- closed does not support %s operator
- started does not support %s operator
- id only supports = operator
- spec only supports = operator
- parent only supports = operator
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/dc6b95fe239815bb.
Report an issue: GitHub.