Validate Rule IDs

On this page

Each finding of ondatrasql validate carries one of these rule IDs. They are public contract: a rule ID is never renamed or removed without a schema_version bump. BLOCKER fails at run; WARN means validate’s own analysis was degraded; INFO cannot be verified without external state.

Rule IDSeverityReported when
parser.multi_statementBLOCKERA model holds more than one SQL statement
parser.invalid_directiveBLOCKERA -- @ directive is unknown or malformed
parser.invalid_kindBLOCKER@kind names no model kind
parser.invalid_unique_keyBLOCKER@unique_key is missing or malformed for the kind
parser.invalid_incrementalBLOCKER@incremental is malformed
parser.invalid_sorted_byBLOCKER@sorted_by is malformed
parser.invalid_partitioned_byBLOCKER@partitioned_by is malformed
parser.missing_directiveBLOCKERA directive the model needs is missing, such as @fetch on a model with a lib call
parser.duplicate_targetBLOCKERTwo models materialize the same target
parser.lambda_arrowBLOCKERA lambda is written x -> ..., in a model or in a macro under config/macros/; DuckDB 2.0 rejects it when the query runs or the macro is created. Write lambda x: .... Not reported when config/settings.sql sets lambda_syntax to ENABLE_SINGLE_ARROW
parser.unterminated_block_commentBLOCKERA /* in the header has no closing */
parser.deprecated_sinkBLOCKERThe removed @sink directive
parser.deprecated_scriptBLOCKERThe removed @script directive
parser.deprecated_sink_detect_deletesBLOCKERThe removed @sink_detect_deletes directive
parser.deprecated_sink_delete_thresholdBLOCKERThe removed @sink_delete_threshold directive
parser.otherBLOCKERAny other parse failure: SQL DuckDB cannot serialize (such as a top-level or dynamic PIVOT), source tables or, for append and merge, column lineage that cannot be read, or lib-call arguments that cannot be read from the AST (reported as cross_ast.args_mismatch before DuckDB 2.0)
strict_fetch.cast_requiredBLOCKERA @fetch projection is not cast
strict_fetch.alias_requiredBLOCKERA @fetch cast has no alias
strict_fetch.where_clause_disallowedBLOCKERA @fetch model has a WHERE clause
strict_fetch.group_by_disallowedBLOCKERA @fetch model has GROUP BY
strict_fetch.distinct_disallowedBLOCKERA @fetch model has DISTINCT
strict_fetch.order_by_disallowedBLOCKERA @fetch model has ORDER BY
strict_fetch.union_disallowedBLOCKERA @fetch model is a set operation
strict_fetch.multiple_lib_callsBLOCKERA @fetch model calls more than one lib function
strict_fetch.no_lib_callBLOCKERA @fetch model calls no lib function
strict_fetch.otherBLOCKERAny other @fetch contract violation
strict_push.cast_requiredBLOCKERA @push projection is not cast
strict_push.alias_requiredBLOCKERA @push cast has no alias
strict_push.select_star_disallowedBLOCKERA @push model projects *
strict_push.lib_call_disallowedBLOCKERA @push model calls a lib function in FROM
strict_push.otherBLOCKERAny other @push contract violation
read_only.limit_disallowedBLOCKERA pipeline model has LIMIT
read_only.offset_disallowedBLOCKERA pipeline model has OFFSET
dag.cycle_detectedBLOCKERModels depend on each other in a cycle
dag.external_referenceINFOA model reads a table no model produces
blueprint.invalid_api_dictBLOCKERA lib file’s API dict is invalid, or the file does not parse
blueprint.helper_without_apiINFOA lib file has no API dict and no _ prefix marking it as a helper
blueprint.unchecked_statusINFOA blueprint calls http.* without checking the response status (heuristic)
blueprint.otherBLOCKERAny other blueprint problem
push.kind_not_supportedBLOCKERThe sink does not support the model’s kind
push.missing_unique_keyBLOCKERThe push needs @unique_key
push.missing_group_keyBLOCKERThe push needs @group_key
push.invalid_poll_intervalBLOCKERA poll interval is malformed
push.invalid_poll_timeoutBLOCKERA poll timeout is malformed
push.otherBLOCKERAny other push compatibility problem
cross_ast.args_mismatchBLOCKERA lib-call argument cannot be bound: an unknown name, a parameter given twice, a positional argument after a named one, or more arguments than the blueprint declares
cross_ast.unknown_libBLOCKERFROM name(...) is neither a blueprint nor a DuckDB table function
validate.extensions_load_failedWARNextensions.sql failed to load in validate’s session
validate.blueprint_load_failedWARNA blueprint failed to load, so models using it are checked partially
validate.builtin_introspection_failedWARNDuckDB’s built-in table functions could not be listed
validate.walk_skippedWARNPart of the project tree could not be walked
validate.lineage_extract_failedWARNThe model’s lineage or AST could not be read, so its DAG and cross-AST checks were skipped