{"record":{"id":"d5afea5e15f4abd8","repo":"hasura/graphql-engine","slug":"in-select-filter-permissions-error","errorCode":null,"errorMessage":"in select filter permissions: {error}","messagePattern":"in select filter permissions: (.+?)","errorType":"validation","errorClass":"ModelPermissionError","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/model_permissions/error.rs","lineNumber":50,"sourceCode":"        model_name: Spanned<Qualified<ModelName>>,\n    },\n\n    #[error(\"preset argument '{argument_name}' value has a type error: {type_error}\")]\n    ModelArgumentValuePresetTypeError {\n        argument_name: Spanned<ArgumentName>,\n        value_path: JSONPath,\n        type_error: typecheck::TypecheckError,\n    },\n\n    #[error(\n        \"a preset argument '{argument_name}' has been set for the model '{model_name}' but no such argument exists for this model\"\n    )]\n    ModelArgumentPresetArgumentNotFound {\n        model_name: Spanned<Qualified<ModelName>>,\n        argument_name: Spanned<ArgumentName>,\n    },\n\n    #[error(\"in select filter permissions: {error}\")]\n    SelectFilterPermissionTypePredicateError { error: TypePredicateError },\n\n    #[error(\"unknown type {custom_type_name}\")]\n    UnknownType {\n        custom_type_name: Qualified<CustomTypeName>,\n    },\n\n    #[error(\"model source is required to resolve relational permissions\")]\n    ModelSourceRequiredForRelationalPermissions,\n    #[error(\"unknown collection {collection} in data connector {data_connector}\")]\n    UnknownModelCollection {\n        data_connector: Qualified<DataConnectorName>,\n        collection: open_dds::data_connector::CollectionName,\n    },\n    #[error(\"relational insert is not supported for this model\")]\n    RelationalInsertNotSupported,\n    #[error(\"relational update is not supported for this model\")]\n    RelationalUpdateNotSupported,","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/model_permissions/error.rs#L32-L68","documentation":"SelectFilterPermissionTypePredicateError: the `filter` expression in a model's select permission failed to compile as a type predicate. The inner TypePredicateError explains the specific failure (unknown field, type mismatch in comparison, invalid operator usage). The select filter is typechecked against the model's underlying type.","triggerScenarios":"Writing a select `filter` in model permissions that references a field not on the model's type, compares incompatible types, or uses a session variable/expression whose type doesn't match the field, during metadata resolution.","commonSituations":"Hand-writing filter YAML, session-variable based filters (X-Hasura-User-Id string vs Int column), schema evolution removing/renaming fields used in filters.","solutions":["Read the inner {error} (TypePredicateError) to see which field/comparison failed","Fix the filter to reference existing fields with type-compatible values, casting session variables where supported","Re-run `ddn build` to validate filters against the current type definitions"],"exampleFix":"# before (id is Int)\nfilter:\n  id:\n    eq: X-Hasura-User-Id   # string session variable\n\n# after\nfilter:\n  id:\n    eq: $X-Hasura-User-Id  # or cast/configure session variable as Int via claims map","handlingStrategy":"try-catch","validationCode":"null","typeGuard":null,"tryCatchPattern":"// In Rust, when resolving metadata for a subgraph:\nif let Err(e) = resolve_subgraph(subgraph) {\n    if let Some(np) = e.downcast_ref::<NamedModelPermissionError>() {\n        if matches!(np.error, ModelPermissionError::SelectFilterPermissionTypePredicateError { .. }) {\n            // surface inner TypePredicateError + role span to the metadata author\n        }\n    }\n}","preventionTips":["Typecheck session variables in filters (map claims to correct types in auth config)","Validate filters after any schema/type change with `ddn build`"],"tags":["hasura","ddn","permissions","filter","predicate","typecheck"],"backgroundTag":"permission-filter-typecheck-failed","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}