{"record":{"id":"c4cd0ef13a349d2d","repo":"derailed/k9s","slug":"invalid-label-selector-w","errorCode":null,"errorMessage":"invalid label selector: %w","messagePattern":"invalid label selector: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/view/custom_jump.go","lineNumber":64,"sourceCode":"\t\t\tv = NewBrowser(targetGVR)\n\t\t\tif mv.enterFn != nil {\n\t\t\t\tv.GetTable().SetEnterFn(mv.enterFn)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = NewScaleExtender(NewOwnerExtender(NewBrowser(targetGVR)))\n\t}\n\n\t// Build label selector if specified\n\tvar labelSel labels.Selector\n\tif rule.LabelSelector != \"\" {\n\t\tlabelStr, labelErr := applyTemplate(rule.LabelSelector, sourceObj)\n\t\tif labelErr != nil {\n\t\t\treturn fmt.Errorf(\"failed to process label selector template: %w\", labelErr)\n\t\t}\n\t\tlabelSel, labelErr = labels.Parse(labelStr)\n\t\tif labelErr != nil {\n\t\t\treturn fmt.Errorf(\"invalid label selector: %w\", labelErr)\n\t\t}\n\t}\n\n\t// Set label selector if we have one\n\tif labelSel != nil {\n\t\tv.SetLabelSelector(labelSel, true)\n\t}\n\n\t// Build field selector if specified\n\tvar fieldSel string\n\tif rule.FieldSelector != \"\" {\n\t\tvar fieldErr error\n\t\tfieldSel, fieldErr = applyTemplate(rule.FieldSelector, sourceObj)\n\t\tif fieldErr != nil {\n\t\t\treturn fmt.Errorf(\"failed to process field selector template: %w\", fieldErr)\n\t\t}\n\t}\n","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/derailed/k9s/blob/2d3ccc6ba2ce98c3781bfc441bb3e884f072774f/internal/view/custom_jump.go#L46-L82","documentation":"After the label selector template renders successfully, the result is parsed with labels.Parse() from apimachinery. Parsing failed, meaning the rendered string is not valid Kubernetes label selector grammar (=, !=, in, notin, exists operators with proper quoting).","triggerScenarios":"A template that expands to an empty string, injects whitespace/quotes in the wrong place, or produces something like 'app=foo bar' or 'app in (a,b' — e.g. a label value containing characters that break the key=value pair.","commonSituations":"Label values with spaces or '=' inside; field-selector syntax (metadata.name=x) mistakenly put under labelSelector; template rendering to empty because the referenced label exists but is empty.","solutions":["Dry-run the exact rendered string: kubectl get pods -l '<rendered selector>'","Fix the grammar: single key=value pairs joined by commas, set-based operators (in/notin) with parenthesized value lists","If the template can render empty, guard it — an empty labelSelector entry should stay empty (which is skipped) rather than emit stray text"],"exampleFix":"// before\nlabelSelector: \"{{ .metadata.labels.app }}\"   // renders to bare value 'myapp' — invalid\n// after\nlabelSelector: \"app={{ .metadata.labels.app }}\"  // renders to 'app=myapp' — valid","handlingStrategy":"validation","validationCode":"// validate selector grammar the same way k9s will, before shipping the rule\nsel, err := labels.Parse(renderedSelector)\nif err != nil {\n    return fmt.Errorf(\"selector %q is not valid k8s label-selector syntax: %w\", renderedSelector, err)\n}\n_ = sel","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Test every selector with kubectl get pods -l '<selector>' before putting it in k9s config","Never let a template render to an empty or bare value; templates belong on the value side of key=value","Remember field-selector syntax (metadata.name=x) is invalid in labelSelector — use the fieldSelector key for that"],"tags":["kubernetes","k9s","label-selector","validation","config"],"backgroundTag":null,"analyzedSha":"2d3ccc6ba2ce98c3781bfc441bb3e884f072774f","analyzedAt":"2026-08-15T16:09:14.432Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}