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

  1. Use `started > <date>` or `started >= <date>` (after) or `started < <date>` / `started <= <date>` (before).
  2. Express 'started on date D' as a range: `started >= D and started < D+1day`.
  3. 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

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


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