gastownhall/beads · error
updated does not support %s operator
Error message
updated does not support %s operator
What it means
The updated field accepts only =, >, >=, <, and <= in filter mode (mapped to UpdatedAfter/UpdatedBefore). An operator outside that set — typically != — lands in the switch default and returns this error naming the unsupported operator. The time value was valid; only the operator is rejected.
Source
Thrown at internal/query/evaluator.go:380
return fmt.Errorf("invalid updated time: %w", err)
}
switch comp.Op {
case OpEquals:
dayStart := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
dayEnd := dayStart.Add(24 * time.Hour)
filter.UpdatedAfter = &dayStart
filter.UpdatedBefore = &dayEnd
case OpGreater:
filter.UpdatedAfter = &t
case OpGreaterEq:
filter.UpdatedAfter = &t
case OpLess:
filter.UpdatedBefore = &t
case OpLessEq:
endOfDay := time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 999999999, t.Location())
filter.UpdatedBefore = &endOfDay
default:
return fmt.Errorf("updated does not support %s operator", comp.Op.String())
}
return nil
}
func (e *Evaluator) applyClosedFilter(comp *ComparisonNode, filter *types.IssueFilter) error {
t, err := e.parseTimeValue(comp)
if err != nil {
return fmt.Errorf("invalid closed time: %w", err)
}
switch comp.Op {
case OpGreater:
filter.ClosedAfter = &t
case OpGreaterEq:
filter.ClosedAfter = &t
case OpLess:
filter.ClosedBefore = &t
case OpLessEq:
endOfDay := time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 999999999, t.Location())View on GitHub (pinned to 71377f2769)
Solutions
- Rephrase negation as a disjunction of supported comparisons (e.g. `updated < X OR updated > Y`)
- Restrict to =, >, >=, <, <= when building updated filters
- Use predicate mode if the needed operator is supported by buildUpdatedPredicate
Example fix
// before bd list 'updated != today' // after bd list 'updated < today OR updated > tomorrow'
Defensive patterns
Strategy: validation
Validate before calling
// Allow only supported updated operators
var allowed = map[Op]bool{OpEquals: true, OpGreater: true, OpGreaterEq: true, OpLess: true, OpLessEq: true}
if comp.Field == "updated" && !allowed[comp.Op] {
return fmt.Errorf("updated does not support %s", comp.Op.String())
} Type guard
func updatedOpSupported(op Op) bool {
switch op {
case OpEquals, OpGreater, OpGreaterEq, OpLess, OpLessEq:
return true
}
return false
} Try / catch
if err := eval.applyComparison(comp, filter); err != nil {
if strings.Contains(err.Error(), "updated does not support") {
// rewrite the negation as a range: updated < X OR updated > Y
}
} Prevention
- Use only =, >, >=, <, <= with updated
- Express 'not on date D' as two range comparisons
- Gate query builders on the operator whitelist before emitting syntax
When it happens
Trigger: Queries like `updated != 2026-08-01` or other non-comparison operators on updated reach the default branch of applyUpdatedFilter.
Common situations: Attempting to exclude a specific update date; generated queries from tools assuming full operator sets; users translating SQL WHERE clauses directly into bd query syntax.
Related errors
- created does not support %s operator
- owner filtering requires predicate mode
- label only supports = operator
- title only supports = operator (use title contains pattern)
- description only supports = operator (use desc contains patt
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/f20fac4ca51ad626.
Report an issue: GitHub.