{"record":{"id":"fe93305ff09d60cb","repo":"BoundaryML/baml","slug":"unknown-family-member-name","errorCode":null,"errorMessage":"unknown family member `{name}`","messagePattern":"unknown family member `(.+?)`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"baml_language/crates/baml_type_macros/src/parse.rs","lineNumber":305,"sourceCode":"}\n\nimpl Family {\n    pub(crate) fn from_input(input: FamilyInput) -> syn::Result<Self> {\n        let FamilyInput {\n            axes,\n            members,\n            satellites,\n            master,\n        } = input;\n\n        let axis_index = |name: &Ident| -> syn::Result<usize> {\n            axes.iter()\n                .position(|a| a == name)\n                .ok_or_else(|| syn::Error::new(name.span(), format!(\"unknown axis `{name}`\")))\n        };\n        let member_index = |name: &Ident| -> syn::Result<usize> {\n            members.iter().position(|m| &m.name == name).ok_or_else(|| {\n                syn::Error::new(name.span(), format!(\"unknown family member `{name}`\"))\n            })\n        };\n\n        let master_ident = master.ident.clone();\n\n        let resolved_members = members\n            .iter()\n            .enumerate()\n            .map(|(i, m)| {\n                let includes = m\n                    .includes\n                    .iter()\n                    .map(&axis_index)\n                    .collect::<syn::Result<Vec<_>>>()?;\n                let child = match &m.child {\n                    ChildRef::SelfRef => Child::Member(i),\n                    ChildRef::Named(name) => {\n                        let idx = member_index(name)?;","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/baml_language/crates/baml_type_macros/src/parse.rs#L287-L323","documentation":"In the same macro parser (from_input), family member references are resolved by name against the declared members. An ident that matches no declared member produces a compile-time syn::Error spanned on that ident.","triggerScenarios":"Expanding the macro with input referencing a family member name not present in the members declaration — misspelling, or referencing a member deleted/renamed in the family definition.","commonSituations":"Typos in member names within macro invocations; adding a member to the invocation but not the family (or removing it from the family but not call sites); copy-paste from a different type family.","solutions":["Correct the member name in the macro invocation to match a declared member","Inspect the family definition's members list for valid names","If a member was renamed, update every macro call site referencing the old name"],"exampleFix":"// before\nmember: ChatMesage,\n\n// after\nmember: ChatMessage,","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"fn known_member(name: &str, members: &[Member]) -> Option<usize> {\n    members.iter().position(|m| m.name == name)\n}","tryCatchPattern":"// Compile-time error; fix the source. To surface a friendlier message in build scripts:\nmatch known_member(\"ChatMessage\", &members) {\n    Some(_) => {}\n    None => panic!(\"member `ChatMessage` not declared; available: {:?}\", members.iter().map(|m| &m.name).collect::<Vec<_>>()),\n}","preventionTips":["Copy member names from the family declaration rather than typing them","After renaming a member, grep for the old name across macro invocations","Keep family member lists and their macro usages in the same module where possible"],"tags":["proc-macro","rust","compile-time"],"backgroundTag":"invalid-identifier-format","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}