{"record":{"id":"40d6bbecca4d50cf","repo":"BoundaryML/baml","slug":"invalid-allowed-role-metadata-allowed-values-are-all-or-none","errorCode":null,"errorMessage":"Invalid allowed role metadata: {}. Allowed values are 'all' or 'none' or an array of roles.","messagePattern":"Invalid allowed role metadata: (.+?)\\. Allowed values are 'all' or 'none' or an array of roles\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-lib/llm-client/src/clientspec.rs","lineNumber":476,"sourceCode":"    pub fn required_env_vars(&self) -> HashSet<String> {\n        match self {\n            Self::Value(role) => role.required_env_vars(),\n            Self::Only(roles) => roles\n                .iter()\n                .flat_map(|role| role.required_env_vars())\n                .collect(),\n            _ => HashSet::new(),\n        }\n    }\n\n    pub fn resolve(&self, ctx: &impl GetEnvVar) -> Result<AllowedRoleMetadata> {\n        match self {\n            Self::Value(role) => {\n                let role = role.resolve(ctx)?;\n                match role.as_str() {\n                    \"all\" => Ok(AllowedRoleMetadata::All),\n                    \"none\" => Ok(AllowedRoleMetadata::None),\n                    _ => Err(anyhow::anyhow!(\"Invalid allowed role metadata: {}. Allowed values are 'all' or 'none' or an array of roles.\", role)),\n                }\n            }\n            Self::All => Ok(AllowedRoleMetadata::All),\n            Self::None => Ok(AllowedRoleMetadata::None),\n            Self::Only(roles) => Ok(AllowedRoleMetadata::Only(\n                roles\n                    .iter()\n                    .map(|role| role.resolve(ctx))\n                    .collect::<Result<Vec<_>>>()?,\n            )),\n        }\n    }\n}\n\nimpl AllowedRoleMetadata {\n    pub fn is_allowed(&self, key: &str) -> bool {\n        match self {\n            Self::All => true,","sourceCodeStart":458,"sourceCodeEnd":494,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-lib/llm-client/src/clientspec.rs#L458-L494","documentation":"The `allowed_role_metadata` value, when given as a single string, must be exactly 'all' or 'none'; anything else (when not an array of roles) is rejected. Arrays of roles are accepted via the Only variant.","triggerScenarios":"Resolving a prompt/chat role metadata attribute whose string value is neither 'all', 'none', nor a valid roles array — e.g. allowed_role_metadata \"everything\".","commonSituations":"Misspelling 'all'/'none' (wrong case, extra words) or passing a single role string where an array is expected.","solutions":["Use the exact strings 'all' or 'none', or provide an array of roles.","Fix casing/typos in the metadata value.","If you meant a single role restriction, wrap it as a one-element array."],"exampleFix":"// before\nallowed_role_metadata \"everything\"\n// after\nallowed_role_metadata \"all\"\n// or\nallowed_role_metadata [\"system\", \"user\"]","handlingStrategy":"validation","validationCode":"if (typeof meta === \"string\" && !['all', 'none'].includes(meta) && !Array.isArray(meta)) {\n  throw new Error(`allowed_role_metadata must be 'all', 'none', or an array, got: ${meta}`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only the exact literals 'all'/'none' or role arrays.","Add schema validation for prompt metadata fields."],"tags":["config","validation","metadata","baml"],"backgroundTag":"invalid-argument-value","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}