{"record":{"id":"12757949d4a7e1b9","repo":"n8n-io/n8n","slug":"missing-valueboolean-for-isnull-operator","errorCode":null,"errorMessage":"Missing 'valueBoolean' for 'isNull' operator.","messagePattern":"Missing 'valueBoolean' for 'isNull' operator\\.","errorType":"exception","errorClass":"OperationalError","httpStatus":null,"severity":"warning","filePath":"packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts","lineNumber":110,"sourceCode":"\t\t\t\tthrow new OperationalError(\"Missing 'valueTextArray' for 'containsAll' operator.\");\n\t\t\t}\n\t\t\treturn property.containsAll(filter.valueTextArray);\n\n\t\tcase 'greaterthan':\n\t\t\tif (filter.valueNumber === undefined) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueNumber' for 'greaterThan' operator.\");\n\t\t\t}\n\t\t\treturn property.greaterThan(filter.valueNumber);\n\n\t\tcase 'lessthan':\n\t\t\tif (filter.valueNumber === undefined) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueNumber' for 'lessThan' operator.\");\n\t\t\t}\n\t\t\treturn property.lessThan(filter.valueNumber);\n\n\t\tcase 'isnull':\n\t\t\tif (filter.valueBoolean === undefined) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueBoolean' for 'isNull' operator.\");\n\t\t\t}\n\t\t\treturn property.isNull(filter.valueBoolean);\n\n\t\tcase 'withingeorange':\n\t\t\tif (!filter.valueGeoCoordinates) {\n\t\t\t\tthrow new OperationalError(\"Missing 'valueGeoCoordinates' for 'withinGeoRange' operator.\");\n\t\t\t}\n\t\t\treturn property.withinGeoRange(filter.valueGeoCoordinates);\n\n\t\tdefault:\n\t\t\tthrow new OperationalError(`Unsupported operator: ${operator}`);\n\t}\n\n\tthrow new OperationalError(`No valid filter value provided for operator: ${operator}`);\n}\n\nexport function parseCompositeFilter(\n\tfilter: WeaviateCompositeFilter | WeaviateFilterUnit,","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/nodes-langchain/nodes/vector_store/VectorStoreWeaviate/Weaviate.utils.ts#L92-L128","documentation":"OperationalError from buildFilter when operator is 'isnull' but valueBoolean is undefined. Despite the name, n8n's isNull branch calls property.isNull(filter.valueBoolean), so a boolean value is mandatory to build the filter.","triggerScenarios":"Filter unit { operator: 'isnull', path: [...], /* valueBoolean missing */ } reaches buildFilter.","commonSituations":"User assumed isNull needs no value; expression for the boolean resolved undefined; JSON filter omitted valueBoolean.","solutions":["Provide valueBoolean: { operator: 'isNull', path: ['deleted'], valueBoolean: true }.","If you intended a value-less null check, note this build requires a boolean — supply true/false explicitly.","Validate filter units so 'isnull' always carries valueBoolean."],"exampleFix":"// before: { operator: 'isNull', path: ['deleted'] }\n// after:  { operator: 'isNull', path: ['deleted'], valueBoolean: true }","handlingStrategy":"validation","validationCode":"if (f.operator.toLowerCase() === 'isnull' && typeof f.valueBoolean !== 'boolean') { throw new Error(\"'isNull' requires a boolean valueBoolean\"); }","typeGuard":"function isIsNullComplete(f: WeaviateFilterUnit): f is WeaviateFilterUnit & { valueBoolean: boolean } { return f.operator.toLowerCase() === 'isnull' && typeof f.valueBoolean === 'boolean'; }","tryCatchPattern":"try { buildFilter(unit) } catch (e) { if (/valueBoolean.*isNull/.test(e.message)) { /* set boolean */ } else throw e; }","preventionTips":["Note that isNull in this builder requires valueBoolean — document this surprise for users.","Default the boolean control to true/false, never undefined.","Add an integration test covering the isNull branch."],"tags":["weaviate","filter","validation","operator","boolean"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}