{"record":{"id":"9ca9f5f770ecb3a7","repo":"gastownhall/beads","slug":"status-all-cannot-be-combined-with-other-statuse","errorCode":null,"errorMessage":"status \"all\" cannot be combined with other statuses","messagePattern":"status \"all\" cannot be combined with other statuses","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/workapi/list.go","lineNumber":521,"sourceCode":"\nfunc applyStatusParts(filter *types.IssueFilter, parts []string, customStatusNames []string) error {\n\tif len(parts) == 1 {\n\t\ts := types.Status(parts[0])\n\t\tif !s.IsValidWithCustom(customStatusNames) {\n\t\t\treturn fmt.Errorf(\"invalid status %q (valid: %s)\", parts[0], ValidStatusList(customStatusNames))\n\t\t}\n\t\tfilter.Status = &s\n\t\treturn nil\n\t}\n\n\tfor _, part := range parts {\n\t\ts := types.Status(part)\n\t\tif !s.IsValidWithCustom(customStatusNames) {\n\t\t\t// \"all\" is a real selector on its own (every status), so failing\n\t\t\t// it as merely \"invalid\" would contradict the flag help. A custom\n\t\t\t// status literally named \"all\" passes validation above instead.\n\t\t\tif part == \"all\" {\n\t\t\t\treturn fmt.Errorf(`status \"all\" cannot be combined with other statuses`)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"invalid status %q in multi-status filter (valid: %s)\", part, ValidStatusList(customStatusNames))\n\t\t}\n\t\tfilter.Statuses = append(filter.Statuses, s)\n\t}\n\treturn nil\n}\n","sourceCodeStart":503,"sourceCodeEnd":529,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/workapi/list.go#L503-L529","documentation":"In a comma-separated multi-status selector, \"all\" is only meaningful alone (it means every status). Combining \"all\" with other statuses is ambiguous and rejected with this dedicated message rather than the generic invalid-status error.","triggerScenarios":"Calling ApplyStatusFilter or BuildListFilter with a status string like \"all,open\" or \"open,all,closed\" — a multi-part selector where one part is the literal \"all\".","commonSituations":"Users typing `bd list --status all,open` expecting OR semantics; scripts appending \"all\" to an existing status list; confusion between --all flag and --status all.","solutions":["Use \"--status all\" alone to list every status","Remove the \"all\" part and list the concrete statuses you want, e.g. \"open,in_progress\"","Use the --all flag instead of --status all if that is what you meant","Note: a custom status literally named \"all\" is allowed only as a single-part selector"],"exampleFix":"// before\nbd list --status all,open\n// after\nbd list --status all   # or: bd list --status open,in_progress","handlingStrategy":"validation","validationCode":"parts := strings.Split(status, \",\")\nif len(parts) > 1 {\n    for _, p := range parts {\n        if strings.TrimSpace(p) == \"all\" {\n            return fmt.Errorf(\"use --status all alone\")\n        }\n    }\n}","typeGuard":null,"tryCatchPattern":"err := workapi.ApplyStatusFilter(&filter, status, customNames)\nif strings.Contains(err.Error(), \"cannot be combined\") {\n    return fmt.Errorf(\"pass --status all alone, or list concrete statuses\")\n}","preventionTips":["Never combine \"all\" with other statuses in a selector","Treat \"all\" as a standalone selector in UIs and scripts","Build status lists programmatically and strip \"all\" from multi-selects","Document that a custom status named \"all\" only works as a sole selector"],"tags":["validation","status","cli"],"backgroundTag":"invalid-status-combination","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}