{"record":{"id":"af38aba52fc8b71f","repo":"pulumi/pulumi","slug":"invalid-approval-mode-q-expected-one-of-manual","errorCode":null,"errorMessage":"invalid --approval-mode %q: expected one of manual, balanced, auto","messagePattern":"invalid --approval-mode %q: expected one of manual, balanced, auto","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/pulumi/neo/neo.go","lineNumber":325,"sourceCode":"// valueOrEmpty maps the bare-flag sentinel back to \"\" so callers see an explicit id or nothing.\nfunc valueOrEmpty(v string) string {\n\tif v == debugLatestSentinel {\n\t\treturn \"\"\n\t}\n\treturn v\n}\n\n// parseApprovalMode validates the --approval-mode flag value against the\n// NeoApprovalMode enum. The cloud rejects unknown values too, but a CLI-side\n// check produces a clearer error before any network round-trip.\nfunc parseApprovalMode(s string) (client.NeoApprovalMode, error) {\n\tswitch client.NeoApprovalMode(s) {\n\tcase client.NeoApprovalModeManual,\n\t\tclient.NeoApprovalModeBalanced,\n\t\tclient.NeoApprovalModeAuto:\n\t\treturn client.NeoApprovalMode(s), nil\n\t}\n\treturn \"\", fmt.Errorf(\"invalid --approval-mode %q: expected one of manual, balanced, auto\", s)\n}\n\n// parsePermissionMode validates the --permission-mode flag value against the\n// NeoPermissionMode enum.\nfunc parsePermissionMode(s string) (client.NeoPermissionMode, error) {\n\tswitch client.NeoPermissionMode(s) {\n\tcase client.NeoPermissionModeDefault, client.NeoPermissionModeReadOnly:\n\t\treturn client.NeoPermissionMode(s), nil\n\t}\n\treturn \"\", fmt.Errorf(\"invalid --permission-mode %q: expected one of default, read-only\", s)\n}\n\n// neoRunOptions carries everything runNeo needs to start a Neo session.\ntype neoRunOptions struct {\n\tprompt         string\n\tstackName      string\n\torgFlag        string\n\tcwdFlag        string","sourceCodeStart":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/cmd/pulumi/neo/neo.go#L307-L343","documentation":"Returned by parseApprovalMode in pkg/cmd/pulumi/neo/neo.go:325 when the --approval-mode flag value does not match one of the NeoApprovalMode enum values manual, balanced, or auto. The parser does a case-sensitive switch over the enum strings and rejects all other inputs before a session is started.","triggerScenarios":"Running `pulumi neo --approval-mode Manual|AUTO|full|sudo` or any misspelled/abbreviated value; scripts with a value coming from an env var or config file that holds a non-enum string.","commonSituations":"Case mismatches (values must be lowercase); typos like 'manually'; older scripts using approval names from a different tool; templated CI configs interpolating wrong variables.","solutions":["Use exactly one of: manual, balanced, auto (lowercase).","Check the flag value's source (env var, CI template) and print it to spot hidden whitespace or casing.","Consult `pulumi neo --help` for the accepted values."],"exampleFix":"// before\n--approval-mode AUTO\n// after\n--approval-mode auto","handlingStrategy":"validation","validationCode":"func validApprovalMode(s string) bool { switch s { case \"manual\", \"balanced\", \"auto\": return true }; return false }\nif !validApprovalMode(flagVal) { return fmt.Errorf(\"bad --approval-mode %q\", flagVal) }","typeGuard":"func isApprovalMode(s string) bool { return s == \"manual\" || s == \"balanced\" || s == \"auto\" }","tryCatchPattern":null,"preventionTips":["Use lowercase enum strings exactly","Print interpolated values from env/CI variables before invoking","Define the modes as constants in scripts instead of inline literals"],"tags":["neo","cli","flag-validation","go"],"backgroundTag":"invalid-flag-value","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}