{"record":{"id":"5e748eb1a642d08a","repo":"bytebase/bytebase","slug":"invalid-label-value-q-for-key-q-must-contain-on","errorCode":null,"errorMessage":"invalid label value %q for key %q: must contain only letters, numbers, underscores, and dashes (max 63 chars)","messagePattern":"invalid label value %q for key %q: must contain only letters, numbers, underscores, and dashes \\(max 63 chars\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/api/v1/common.go","lineNumber":67,"sourceCode":"// - Maximum 64 labels allowed\n// - Keys must start with lowercase letter, then contain only lowercase letters, numbers, underscores, and dashes (max 63 chars)\n// - Values can contain letters, numbers, underscores, and dashes (max 63 chars, can be empty)\nfunc validateLabels(labels map[string]string) error {\n\tif len(labels) > 64 {\n\t\treturn errors.Errorf(\"maximum 64 labels allowed, got %d\", len(labels))\n\t}\n\t// Key pattern: must start with lowercase letter, then lowercase letters, numbers, underscores, dashes (max 63 chars)\n\tkeyPattern := `^[a-z][a-z0-9_-]{0,62}$`\n\t// Value pattern: letters, numbers, underscores, dashes (max 63 chars, can be empty)\n\tvaluePattern := `^[a-zA-Z0-9_-]{0,63}$`\n\tkeyRegex := regexp.MustCompile(keyPattern)\n\tvalueRegex := regexp.MustCompile(valuePattern)\n\tfor key, value := range labels {\n\t\tif !keyRegex.MatchString(key) {\n\t\t\treturn errors.Errorf(\"invalid label key %q: must start with lowercase letter and contain only lowercase letters, numbers, underscores, and dashes (max 63 chars)\", key)\n\t\t}\n\t\tif !valueRegex.MatchString(value) {\n\t\t\treturn errors.Errorf(\"invalid label value %q for key %q: must contain only letters, numbers, underscores, and dashes (max 63 chars)\", value, key)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype Expression struct {\n\tKey      string\n\tOperator OperatorType\n\tValue    string\n}\n\n// ParseFilter will parse the simple filter.\n// TODO(rebelice): support more complex filter.\n// Currently we support the following syntax:\n//  1. for single expression:\n//     i.   defined as `key comparator \"val\"`.\n//     ii.  Comparator can be `=`, `!=`, `>`, `>=`, `<`, `<=`.\n//     iii. If val doesn't contain space, we can omit the double quotes.","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/bytebase/bytebase/blob/1870550677fe08f0d2a78c07acd27541464eb945/backend/api/v1/common.go#L49-L85","documentation":"validateLabels rejects label values not matching ^[a-zA-Z0-9_-]{0,63}$: values may contain letters (any case), digits, underscores, and dashes, up to 63 chars, and may be empty. The error names both the offending value and its key.","triggerScenarios":"CreateInstance/UpdateInstance/CreateProject/UpdateProject with a label value containing spaces, dots, slashes, colons, unicode, or longer than 63 characters.","commonSituations":"Values copied from URLs or file paths ('prod/eu-west'); emails as values; human-readable values with spaces; team names longer than 63 chars.","solutions":["Replace invalid characters (spaces, slashes, dots) with dashes or underscores","Truncate values to 63 characters","Slugify values before assigning them to labels","Pre-validate values with the same regex on the client"],"exampleFix":"// before\nlabels := map[string]string{\"env\": \"production / eu-west\"}\n// after\nlabels := map[string]string{\"env\": \"production-eu-west\"}","handlingStrategy":"validation","validationCode":"var valRe = regexp.MustCompile(`^[a-zA-Z0-9_-]{0,63}$`)\nfunc validLabelValue(v string) bool { return valRe.MatchString(v) }","typeGuard":null,"tryCatchPattern":"err := client.UpdateProject(ctx, req)\nif err != nil && strings.Contains(err.Error(), \"invalid label value\") {\n\t// slugify/truncate values and retry\n}","preventionTips":["Slugify values (replace spaces/slashes/dots with dashes)","Truncate values to 63 chars","Pre-validate with the same regex client-side","Avoid free-text fields as label values"],"tags":["validation","labels","regex"],"backgroundTag":"schema-validation-failed","analyzedSha":"1870550677fe08f0d2a78c07acd27541464eb945","analyzedAt":"2026-09-06T21:16:13.665Z","contentChangedAt":"2026-09-06T21:16:13.665Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}