{"record":{"id":"187767a650c61e50","repo":"BoundaryML/baml","slug":"class-does-not-have-a-field-render-output-format","errorCode":null,"errorMessage":"Class {} does not have a field: {}","messagePattern":"Class (.+?) does not have a field: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-runtime/src/internal/prompt_renderer/render_output_format.rs","lineNumber":85,"sourceCode":"        match v {\n            Some(v) => match v.as_str() {\n                Some(v) => OverridableValue::Set(v.to_string()),\n                None => OverridableValue::SetEmpty,\n            },\n            None => OverridableValue::Unset,\n        }\n    }\n}\n\nfn find_new_class_field(\n    class_name: &str,\n    field_name: &str,\n    class_walker: &Result<ClassWalker<'_>>,\n    overrides: &RuntimeClassOverride,\n    _ctx: &RuntimeContext,\n) -> Result<Option<(Name, TypeIR, Option<String>, bool)>> {\n    let Some(field_overrides) = overrides.new_fields.get(field_name) else {\n        anyhow::bail!(\"Class {} does not have a field: {}\", class_name, field_name);\n    };\n\n    // Ensure the original field does not exist\n    if let Ok(class_walker) = class_walker {\n        if class_walker.find_field(field_name).is_some() {\n            anyhow::bail!(\n                \"Class {} already has a pre-defined field: {}\",\n                class_name,\n                field_name\n            );\n        }\n    }\n\n    if let Some(true) = field_overrides.1.skip {\n        return Ok(None);\n    }\n\n    let alias = OverridableValue::<String>::from(field_overrides.1.alias.as_ref());","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-runtime/src/internal/prompt_renderer/render_output_format.rs#L67-L103","documentation":"BAML runtime class overrides let clients add new fields to classes at runtime, but only if that override key exists in RuntimeClassOverride.new_fields. find_new_class_field bails when the override references a field name that was never declared in new_fields for the class.","triggerScenarios":"relevant_data_models encounters a RuntimeClassOverride where a requested new field name is absent from overrides.new_fields while resolving output-format classes.","commonSituations":"Programmatic override (e.g. via client libraries' output schema overrides) passing a field name that doesn't match the BAML class; typo in the override field key; overrides applied to the wrong class name.","solutions":["Ensure the new field is added under the class's new_fields map in the runtime override","Verify the class name and field name spelling match exactly","Remove the stale override entry if the field is no longer needed","Regenerate/refresh overrides after renaming fields in the .baml file"],"exampleFix":"// before\nnew_fields: { \"descripton\": ... }\n// after\nnew_fields: { \"description\": ... }","handlingStrategy":"validation","validationCode":"function assertNewFieldValid(overrides, className, fieldName, existingClass) {\n  if (!overrides[className]?.new_fields?.[fieldName])\n    throw new Error(`Field '${fieldName}' must be declared in new_fields of class '${className}'`);\n  if (existingClass.fields.includes(fieldName))\n    throw new Error(`Field '${fieldName}' already exists on class '${className}'`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep runtime overrides in sync with the .baml schema after edits","Use update_fields for existing fields and new_fields only for additions","Validate override keys against the generated schema in tests"],"tags":["baml","schema","override","validation"],"backgroundTag":"schema-validation-failed","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"}