{"record":{"id":"a922f5c94134de43","repo":"gastownhall/beads","slug":"invalid-role-q-must-be-maintainer-or-contri","errorCode":null,"errorMessage":"invalid --role %q: must be \"maintainer\" or \"contributor\"","messagePattern":"invalid --role %q: must be \"maintainer\" or \"contributor\"","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/init.go","lineNumber":574,"sourceCode":"\t\t}\n\t\t// Validate --database format early, before any side effects.\n\t\tif database != \"\" {\n\t\t\tif err := dolt.ValidateDatabaseName(database); err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid database name %q: %v\", database, err)\n\t\t\t}\n\t\t}\n\n\t\t// Resolve non-interactive mode: flag > env var > terminal detection.\n\t\t// This must be computed before any interactive prompts.\n\t\tnonInteractive := isNonInteractiveInit(nonInteractiveFlag)\n\n\t\t// Validate --role flag value\n\t\tif roleFlag != \"\" {\n\t\t\tswitch roleFlag {\n\t\t\tcase \"maintainer\", \"contributor\":\n\t\t\t\t// valid\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"invalid --role %q: must be \\\"maintainer\\\" or \\\"contributor\\\"\", roleFlag)\n\t\t\t}\n\t\t}\n\n\t\t// Fail-fast: contributor/team wizards require interaction\n\t\tif nonInteractive && contributor {\n\t\t\treturn fmt.Errorf(\"--contributor requires interactive prompts and cannot be used with --non-interactive\")\n\t\t}\n\t\tif nonInteractive && team {\n\t\t\treturn fmt.Errorf(\"--team requires interactive prompts and cannot be used with --non-interactive\")\n\t\t}\n\n\t\t// Dolt is the only supported backend.\n\t\tbackend := configfile.BackendDolt\n\n\t\t// Also treat BEADS_DOLT_SERVER_MODE=1 env var as --server.\n\t\tif os.Getenv(\"BEADS_DOLT_SERVER_MODE\") == \"1\" {\n\t\t\tinitServerMode = true\n\t\t}","sourceCodeStart":556,"sourceCodeEnd":592,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/init.go#L556-L592","documentation":"The --role flag only accepts the literal values \"maintainer\" or \"contributor\"; any other non-empty string is rejected with this error at init validation time.","triggerScenarios":"`bd init --role=<value>` where value is not exactly \"maintainer\" or \"contributor\" (e.g. --role=admin, --role=Maintainer, --role=dev).","commonSituations":"Guessing role names from other tools (admin/owner/dev), capitalization mismatches, pluralized values (\"maintainers\").","solutions":["Use exactly --role=maintainer or --role=contributor (lowercase)","Drop --role to skip explicit role selection","Check the exact value for case and spelling"],"exampleFix":"// before\nbd init --role=admin\n// after\nbd init --role=maintainer","handlingStrategy":"validation","validationCode":"validRoles := map[string]bool{\"maintainer\": true, \"contributor\": true}\nif roleFlag != \"\" && !validRoles[roleFlag] {\n    return fmt.Errorf(\"--role must be maintainer or contributor\")\n}","typeGuard":null,"tryCatchPattern":"if err := bdInit(\"--role=\" + role); err != nil {\n    if strings.Contains(err.Error(), \"invalid --role\") {\n        // retry with \"maintainer\" or \"contributor\"\n    }\n}","preventionTips":["Only pass the exact lowercase literals maintainer/contributor","Whitelist role values in wrapper scripts","Omit --role when unsure"],"tags":["cli","init","validation","flag-value"],"backgroundTag":"invalid-flag-value","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}