{"record":{"id":"e320fc298ea01d47","repo":"gastownhall/beads","slug":"status-does-not-support-s-operator","errorCode":null,"errorMessage":"status does not support %s operator","messagePattern":"status does not support (.+?) operator","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/query/evaluator.go","lineNumber":746,"sourceCode":"\tcase \"has_metadata_key\":\n\t\treturn e.buildHasMetadataKeyPredicate(comp)\n\tdefault:\n\t\tif strings.HasPrefix(comp.Field, \"metadata.\") {\n\t\t\treturn e.buildMetadataPredicate(comp)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"unknown field: %s\", comp.Field)\n\t}\n}\n\nfunc (e *Evaluator) buildStatusPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\tstatus := types.Status(strings.ToLower(comp.Value))\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\treturn func(i *types.Issue) bool { return i.Status == status }, nil\n\tcase OpNotEquals:\n\t\treturn func(i *types.Issue) bool { return i.Status != status }, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"status does not support %s operator\", comp.Op.String())\n\t}\n}\n\nfunc (e *Evaluator) buildPriorityPredicate(comp *ComparisonNode) (func(*types.Issue) bool, error) {\n\tpriority, err := strconv.Atoi(comp.Value)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid priority: %s\", comp.Value)\n\t}\n\tswitch comp.Op {\n\tcase OpEquals:\n\t\treturn func(i *types.Issue) bool { return i.Priority == priority }, nil\n\tcase OpNotEquals:\n\t\treturn func(i *types.Issue) bool { return i.Priority != priority }, nil\n\tcase OpLess:\n\t\treturn func(i *types.Issue) bool { return i.Priority < priority }, nil\n\tcase OpLessEq:\n\t\treturn func(i *types.Issue) bool { return i.Priority <= priority }, nil\n\tcase OpGreater:","sourceCodeStart":728,"sourceCodeEnd":764,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/query/evaluator.go#L728-L764","documentation":"The query evaluator only supports Equals and NotEquals comparisons on the `status` field. When a query filter compares status with any other operator (e.g. >, <, >=, <=, ~), buildStatusPredicate returns this error. It is a static query-language restriction, not a runtime data problem.","triggerScenarios":"Running a bd query (bd list / search with a query string) whose WHERE-style comparison uses a non-equality operator on status, e.g. `status > open` or `status ~ in_progress`.","commonSituations":"Users assuming status is ordered (open < in_progress < closed) and trying range operators; copy-pasting numeric/label comparison syntax from other query languages; typos where an intended field like priority got the status key.","solutions":["Rewrite the filter to use `=` or `!=` on status, e.g. `status = open`.","If you need multiple statuses, combine with OR: `status = open OR status = in_progress`.","If an ordering comparison was intended, order by priority or created date instead of status."],"exampleFix":"// before (query string)\nbd list --query \"status > open\"\n// after\nbd list --query \"status = open OR status = in_progress\"","handlingStrategy":"validation","validationCode":"// Go: validate before building/running the query\nfunc validStatusOp(op query.Op) bool { return op == query.OpEquals || op == query.OpNotEquals }\nif !validStatusOp(comp.Op) {\n    return fmt.Errorf(\"rewrite filter: use = or != for status, got %s\", comp.Op)\n}","typeGuard":null,"tryCatchPattern":"// Go\npred, err := e.buildComparisonPredicate(node)\nif err != nil {\n    var qe *QueryError\n    if errors.As(err, &qe) { /* surface field/operator to user */ }\n    return fmt.Errorf(\"bad filter %q: %w\", node.String(), err)\n}","preventionTips":["Only ever use = or != on status in query strings.","Express multiple statuses with OR of equality filters.","Validate user-supplied query strings against a per-field operator whitelist before running."],"tags":["query-language","unsupported-operator","bd-query"],"backgroundTag":"query-unsupported-operator","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}