gastownhall/beads · error
started does not support %s operator
Error message
started does not support %s operator
What it means
Thrown when the `started` field is compared with an operator other than `>` or `>=` (and their less-than counterparts map to StartedBefore; the default rejects everything unsupported). Only time-range comparisons are meaningful for `started`, so other operators are rejected.
Source
Thrown at internal/query/evaluator.go:422
}
func (e *Evaluator) applyStartedFilter(comp *ComparisonNode, filter *types.IssueFilter) error {
t, err := e.parseTimeValue(comp)
if err != nil {
return fmt.Errorf("invalid started time: %w", err)
}
switch comp.Op {
case OpGreater:
filter.StartedAfter = &t
case OpGreaterEq:
filter.StartedAfter = &t
case OpLess:
filter.StartedBefore = &t
case OpLessEq:
endOfDay := time.Date(t.Year(), t.Month(), t.Day(), 23, 59, 59, 999999999, t.Location())
filter.StartedBefore = &endOfDay
default:
return fmt.Errorf("started does not support %s operator", comp.Op.String())
}
return nil
}
func (e *Evaluator) applyIDFilter(comp *ComparisonNode, filter *types.IssueFilter) error {
if comp.Op != OpEquals {
return fmt.Errorf("id only supports = operator")
}
// Check if it looks like a prefix (ends with *)
if strings.HasSuffix(comp.Value, "*") {
filter.IDPrefix = strings.TrimSuffix(comp.Value, "*")
} else {
filter.IDs = append(filter.IDs, comp.Value)
}
return nil
}
func (e *Evaluator) applySpecFilter(comp *ComparisonNode, filter *types.IssueFilter) error {View on GitHub (pinned to 71377f2769)
Solutions
- Use `started > <date>` or `started >= <date>` (after) or `started < <date>` / `started <= <date>` (before).
- Express 'started on date D' as a range: `started >= D and started < D+1day`.
- Check documented operators for `started` before building programmatic queries.
Example fix
// before bd list 'started = 2024-06-01' // after bd list 'started >= 2024-06-01 and started <= 2024-06-01'
Defensive patterns
Strategy: validation
Validate before calling
func validateStartedOp(op string) error {
switch op {
case ">", ">=", "<", "<=":
return nil
default:
return fmt.Errorf("started supports only time-range operators, got %q", op)
}
} Prevention
- Use range operators (> >= < <=) for `started`, never equality.
- Express 'started on day D' as a >= / <= range pair.
- Centralize query construction so operators are constrained per field.
When it happens
Trigger: Queries like `started = 2024-06-01` or `started != yesterday` — any ComparisonNode on "started" whose Op falls into the default branch of applyStartedFilter.
Common situations: Expecting equality on a timestamp instead of a range; copying `closed`-style `<=` queries onto `started` when only `>`/`>=` are intended/supported.
Related errors
- closed does not support %s operator
- id only supports = operator
- spec only supports = operator
- parent only supports = operator
- %s only supports = operator
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/8824f62ca7759caf.
Report an issue: GitHub.