{"record":{"id":"c59257f697df7827","repo":"hasura/graphql-engine","slug":"unknown-field-field-name-used-in-object-boole","errorCode":null,"errorMessage":"unknown field '{field_name:}' used in object boolean expression type {object_boolean_expression_type:}","messagePattern":"unknown field '(.+?)' used in object boolean expression type (.+?)","errorType":"validation","errorClass":"BooleanExpressionError::UnknownFieldInObjectBooleanExpressionType","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/boolean_expressions/error.rs","lineNumber":47,"sourceCode":"        boolean_expression_type_name: Qualified<CustomTypeName>,\n        type_name: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"unknown data connector {data_connector:} referenced in object boolean expression type {object_boolean_expression_type:}\"\n    )]\n    UnknownDataConnectorInObjectBooleanExpressionType {\n        data_connector: Qualified<DataConnectorName>,\n        object_boolean_expression_type: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"unknown data connector object type {data_connector_object_type:} (in data connector {data_connector:}) referenced in object boolean expression type {object_boolean_expression_type:}\"\n    )]\n    UnknownDataConnectorTypeInObjectBooleanExpressionType {\n        data_connector: Qualified<DataConnectorName>,\n        data_connector_object_type: DataConnectorObjectType,\n        object_boolean_expression_type: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"unknown field '{field_name:}' used in object boolean expression type {object_boolean_expression_type:}\"\n    )]\n    UnknownFieldInObjectBooleanExpressionType {\n        field_name: FieldName,\n        object_boolean_expression_type: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"relationship '{relationship_name}' is used in comparableRelationships in boolean expression type '{object_boolean_expression_type}' does not exist on type '{type_name}'\"\n    )]\n    UnknownRelationshipInObjectBooleanExpressionType {\n        relationship_name: RelationshipName,\n        object_boolean_expression_type: Qualified<CustomTypeName>,\n        type_name: Qualified<CustomTypeName>,\n    },\n    #[error(\n        \"the object type '{object_type:}' used in boolean expression type {object_boolean_expression_type:} does not have a mapping to object {data_connector_object_type:} of data connector {data_connector:}\"\n    )]\n    NoDataConnectorTypeMappingForObjectTypeInBooleanExpression {","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/boolean_expressions/error.rs#L29-L65","documentation":"During boolean expression construction, each comparison operator defined on an object boolean expression type must name a real field of the backing object type. This error fires when an operator (or comparable field) references a field name that does not exist on that object type.","triggerScenarios":"Defining filter operators on a boolean expression type that reference field names not present on the backing object type; renaming or removing a field from the object type without updating the boolean expression's operator definitions.","commonSituations":"Field renames in the object type after filter configuration was authored; typos in field names inside object boolean expression operator config; mismatched casing of field identifiers.","solutions":["Compare the field name in the error against the backing object type's field list","Fix or remove the operator/comparable field entry referencing the unknown field","If the field was renamed, update the boolean expression config to the new name","Rebuild metadata"],"exampleFix":"# before\nfilter:\n  operators:\n    my_sub.SomeBooleanExpression:\n      fields:\n      - name: emial   # typo\n# after\nfilter:\n  operators:\n    my_sub.SomeBooleanExpression:\n      fields:\n      - name: email","handlingStrategy":"validation","validationCode":"// Every operator/comparable field must exist on the backing object type\nlet fields: HashSet<&str> = object_type.fields().map(|f| f.name()).collect();\nfor f in boolean_expr.filterable_fields() {\n    if !fields.contains(f.as_str()) {\n        return Err(format!(\"field {f} does not exist on backing object type\"));\n    }\n}","typeGuard":null,"tryCatchPattern":"match resolve(metadata) {\n    Err(BooleanExpressionError::UnknownFieldInObjectBooleanExpressionType { field_name, object_boolean_expression_type }) => {\n        // fix or drop the operator referencing field_name\n    }\n    other => other,\n}","preventionTips":["Update filter/operator config in the same PR as field renames","Prefer generating filter config from the object type's field list"],"tags":["hasura","ddn","metadata","boolean-expressions","field-resolution","rust"],"backgroundTag":"metadata-field-not-found","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}