{"record":{"id":"dc6b95fe239815bb","repo":"gastownhall/beads","slug":"s-only-supports-operator","errorCode":null,"errorMessage":"%s only supports = operator","messagePattern":"(.+?) only supports = operator","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/query/evaluator.go","lineNumber":463,"sourceCode":"\tif strings.HasSuffix(comp.Value, \"*\") {\n\t\tfilter.SpecIDPrefix = strings.TrimSuffix(comp.Value, \"*\")\n\t} else {\n\t\tfilter.SpecIDPrefix = comp.Value\n\t}\n\treturn nil\n}\n\nfunc (e *Evaluator) applyParentFilter(comp *ComparisonNode, filter *types.IssueFilter) error {\n\tif comp.Op != OpEquals {\n\t\treturn fmt.Errorf(\"parent only supports = operator\")\n\t}\n\tfilter.ParentID = &comp.Value\n\treturn nil\n}\n\nfunc (e *Evaluator) applyBoolFilter(comp *ComparisonNode, filter *types.IssueFilter, field string) error {\n\tif comp.Op != OpEquals {\n\t\treturn fmt.Errorf(\"%s only supports = operator\", field)\n\t}\n\tval := strings.ToLower(comp.Value)\n\tvar boolVal bool\n\tswitch val {\n\tcase \"true\", \"yes\", \"1\":\n\t\tboolVal = true\n\tcase \"false\", \"no\", \"0\":\n\t\tboolVal = false\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid boolean value for %s: %s\", field, comp.Value)\n\t}\n\n\tswitch field {\n\tcase \"pinned\":\n\t\tfilter.Pinned = &boolVal\n\tcase \"ephemeral\":\n\t\tfilter.Ephemeral = &boolVal\n\tcase \"template\":","sourceCodeStart":445,"sourceCodeEnd":481,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/query/evaluator.go#L445-L481","documentation":"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.","triggerScenarios":"Queries like `pinned != false`, `ephemeral > 0`, or `pinned ~ true` reaching applyBoolFilter.","commonSituations":"Writing `pinned != false` to mean \"is pinned\" instead of `pinned = true`; SQL-style boolean comparisons; copying filters between query languages.","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)."],"exampleFix":"// before\nbd list 'pinned != false'\n// after\nbd list 'pinned = true'","handlingStrategy":"validation","validationCode":"func validateBoolComparison(field, op string) error {\n\tif op != \"=\" {\n\t\treturn fmt.Errorf(\"%s supports only =, got %q\", field, op)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Write boolean conditions only as `field = true|false`.","Replace any `!= false` pattern with `= true`.","Restrict boolean fields to = in generated queries."],"tags":["query-language","filter","boolean","operator-unsupported"],"backgroundTag":"unsupported-query-operator","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}